我使用了WPF应用程序模型视图视图模型图案。我有一个视图模型(设定为页的DataContext)具有两个属性,其中之一是具有PropertyChanged事件的实体。在事件处理程序我设置其他属性(一个布尔值)在一定值的值。

现在的按钮和文本框属性是第一次加载结合精致和PropertyChanged事件被解雇,做它的事。但是按钮的IsEnable属性不更新,以反映财产与其绑定的变化。

在视图模型看起来几分像这样:

public sealed class CustomerPageViewModel
{ 
    public Customer Customer
    {
        get;
        set;
    }

    public bool Editing
    {
        get;
        private set;
    }   

    private void Customer_PropertyChanged(object sender,
        System.ComponentModel.PropertyChangedEventArgs e)
    {
        Editing = true;
    }
}

和所述XAML几分看起来像这样:

<TextBox Text="{Binding Customer.Name}" />   
<Button Content="Save Changes" IsEnabled="{Binding Editing}" />

我怎样才能按钮,当我在视图模型更改基础属性更新其IsEnable财产?

有帮助吗?

解决方案

是您的视图模型的实际代码?如果是这样,你的问题是,您的视图模型不执行INotifyPropertyChanged。 WPF可以不知道你的“编辑” VM属性发生变化,所以它没有更新按钮的结合。

其他提示

当的代码集Editingtrue,即不出现触发事件PropertyChanged,所以Button不知道它应该更新IsEnabled的结合。尝试是这样的:

public sealed class CustomerPageViewModel : INotifyPropertyChanged
{ 
    public Customer Customer
    {
        get;
        set;
    }

    private bool editing = false;
    public bool Editing
    {
        get { return editing; }
        private set
        {
            editing = value;
            Customer_PropertyChanged(this, new PropertyChangedEventArgs("Editing");
        }
    }   

    public event PropertyChangedEventHandler PropertyChanged;
    private void Customer_PropertyChanged(object sender,
        System.ComponentModel.PropertyChangedEventArgs e)
    {
        PropertyChanged(this, e);

        if(!e.PropertyName.Equals("Editing"))
        {
            Editing = true;
        }
    }
}

请注意,您必须验证Editing没有引起PropertyChanged事件触发,否则你会得到一个无限循环。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top