したがって、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}" />
だから私の問題は、私がボタンを押した場合それは、それがうまくDateTimeプロパティを変更した後、それは、一度OnMyPropertyを発射、ですが、OnMyPropertyコールバックは再び発射しません。しかし、このようなモデルを変更すると、ボタンを押すたびにそれが発生することに気づきました。
public DateTime Date
{
get
{
return _Date;
}
set
{
_Date = value;
_My = new List<MyContainer>(_My); //added
OnPropertyChanged("Date");
OnPropertyChanged("My");
}
}
その変更なしに2番目の動作をどのようにトリガーできますか?
すべての権利が、イベントマイや日付の変更を発射し、私の場合のために、適切なシナリオです:
OnMyProperty
では、あなたのコントロールクラスは、それが観察コレクションも同様だかどうかを確認することができますか? –たとえば、 'OnMyProperty'と' Date_Click'の両方から新しい関数 'OnChange'を呼び出すことができます。たぶん最善の方法ではないかもしれませんが、私はあなたのアーキテクチャと目的について十分に分かりません。それはあなたが変化に反応したいのはどこで、そしてなぜそれを望んでいるのかによって異なります。 – Fratyx