WPF:刷新与使用模型视图视图模型绑定属性中的控制
-
20-08-2019 - |
题
我使用了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属性发生变化,所以它没有更新按钮的结合。
其他提示
当的代码集Editing
到true
,即不出现触发事件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
事件触发,否则你会得到一个无限循环。
不隶属于 StackOverflow