【发布时间】:2016-12-14 04:27:51
【问题描述】:
所以我有一个模型,其中包含 2 个变量,一个列表和一个日期时间。在我的 UserControl 中,我有一个 DependencyProperty,我还定义了一个 PropertyChangedCallback。
public static readonly DependencyProperty MyProperty = DependencyProperty.Register("My", typeof(List<MyContainer>), typeof(UC), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(OnMyProperty)));
public List<MyContainer> My
{
get
{
return GetValue(MyProperty) as List<MyContainer>;
}
set
{
SetValue(MyProperty, value);
}
}
private static void OnMyProperty(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
UC control = d as UC;
//do stuff
}
在我的表单上有一个按钮,它可以对另一个模型变量(在 DateTime 上)进行更改。
private void Date_Click(object sender, RoutedEventArgs e)
{
MyModel model = DataContext as MyModel;
if (model != null)
{
model.Date = model.Date.AddDays(1);
}
}
最后这是我的模型。
public class MyModel : INotifyPropertyChanged
{
private List<MyContainer> _My;
private DateTime _Date;
public MyModel()
{
_Date = DateTime.Now.Date;
_My = new List<MyContainer>();
}
public List<MyContainer> My
{
get
{
return _My;
}
set
{
_My = value;
OnPropertyChanged("My");
}
}
public DateTime Date
{
get
{
return _Date;
}
set
{
_Date = value;
OnPropertyChanged("Date");
OnPropertyChanged("My");
}
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
XAML 声明如下。
<local:UC My="{Binding My}" />
所以我的问题是,在我运行后,它会触发 OnMyProperty 一次,之后如果我点击按钮,它会很好地更改 DateTime 属性,但 OnMyProperty 回调不会再次触发。但是我注意到,如果我像这样修改我的模型
public DateTime Date
{
get
{
return _Date;
}
set
{
_Date = value;
_My = new List<MyContainer>(_My); //added
OnPropertyChanged("Date");
OnPropertyChanged("My");
}
}
现在每次我按下按钮时它都会触发它。如果不进行该修改,如何触发第二个行为?
【问题讨论】:
标签: c# wpf data-binding viewmodel