私はビューモデルでSelectedItemsを使用できるDataGridで使用するための接続プロパティを持っています。コードはこれです:添付されたプロパティのイベントを購読解除する場所を教えてください。
public class DataGridSelectedItemsAttachedProperty
{
#region SelectedItems
///
/// SelectedItems Attached Dependency Property
///
public static readonly DependencyProperty SelectedItemsProperty =
DependencyProperty.RegisterAttached("SelectedItems", typeof(IList),
typeof(DataGridSelectedItemsAttachedProperty),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
new PropertyChangedCallback(OnSelectedItemsChanged)));
public static IList GetSelectedItems(DependencyObject d)
{
return (IList)d.GetValue(SelectedItemsProperty);
}
public static void SetSelectedItems(DependencyObject d, IList value)
{
d.SetValue(SelectedItemsProperty, value);
}
private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
DataGrid miDg = (DataGrid)d;
miDg.SelectionChanged += dataGrid_SelectionChanged;
miDg.Unloaded += dataGrid_Unloaded;
}
private static void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid miDg = (DataGrid)sender;
//Get list box's selected items.
IEnumerable miDgSelectedItems = miDg.SelectedItems;
//Get list from model
IList ModelSelectedItems = GetSelectedItems(miDg);
//Update the model
ModelSelectedItems.Clear();
if (miDg.SelectedItems != null)
{
foreach (var item in miDg.SelectedItems)
ModelSelectedItems.Add(item);
}
SetSelectedItems(miDg, ModelSelectedItems);
}
private static void dataGrid_Unloaded(object sender, RoutedEventArgs e)
{
DataGrid miDg = sender as DataGrid;
miDg.SelectionChanged -= dataGrid_SelectionChanged;
miDg.Unloaded -= dataGrid_Unloaded;
}
#endregion
}
問題は、このデータグリッドは、イベントのアンロードが発射されたタブコントロールであるということですので、イベントはunsubcribe、その後selectedItemsのはもうビューモデルに通知されていないです。
私はこの問題を解決する方法を知りたいと思います。アンロードイベントではなく、別の場所でイベントの登録を解除するのはどうですか?
ありがとうございました。
この場合、どうしてなぜ購読を停止するのですか? – Evk
右。本当にそれは私が見つけた例だったし、良い解決策だと思う。しかし、このケースでは、添付されたプロパティがユーザーコントロールと同じ時間でなければならないため、サブスクライブを解除する必要はないと考えています。ユーザーコントロールを閉じると、オブジェクトが参照していないため、 。だから、この場合、私はそれも無事だと思う。 –