2013-03-05 6 views
7

WP8では、依存プロパティとしてSelectedItemを提供することを忘れてしまったため、バインドできません。 http://dotnet-redzone.blogspot.com/2012/11/windows-phone-8longlistselector.htmlWP8 LongListSelector SelectedItemバインド不可

私はViewModelからプロパティをリセットできないことに気付いています。つまり、ViewModelでアイテムをnullに設定しても、それは影響を受けません。 UI。私はすでにUIで双方向のバインディングを提供していますが、ViewModelで項目をnullに設定しても、LongListSelectorの選択項目は変更されません。 WP7.5アプリとWP8アプリの間でViewModelsを共有しているので、SelectionChangedイベントを使用したくないので、ViewModelにできるだけ多くをプッシュしたいと思います。これには解決策がありますか?

+0

はしようとするよりも信頼性が高いだろう、あなたの各項目をタップイベントを使用します選択されたものを働かせる... –

答えて

11

使用しているカスタムLongListSelectorクラスがセッターを正しく処理していないようです。

は、以下でOnSelectedItemChangedコールバックを交換してください:

private static void OnSelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var selector = (LongListSelector)d; 
     selector.SetSelectedItem(e); 
    } 

    private void SetSelectedItem(DependencyPropertyChangedEventArgs e) 
    { 
     base.SelectedItem = e.NewValue; 
    } 
2

そして、これら二つの部分のフルバージョンがあります:

public class LongListSelector : Microsoft.Phone.Controls.LongListSelector 
    { 
     public LongListSelector() 
     { 
      SelectionChanged += LongListSelector_SelectionChanged; 
     } 

    void LongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     SelectedItem = base.SelectedItem; 
    } 

    public static readonly DependencyProperty SelectedItemProperty = 
     DependencyProperty.Register(
      "SelectedItem", 
      typeof(object), 
      typeof(LongListSelector), 
      new PropertyMetadata(null, OnSelectedItemChanged) 
     ); 

    private static void OnSelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var selector = (LongListSelector)d; 
     selector.SetSelectedItem(e); 
    } 

    private void SetSelectedItem(DependencyPropertyChangedEventArgs e) 
    { 
     base.SelectedItem = e.NewValue; 
    } 

    public new object SelectedItem 
    { 
     get { return GetValue(SelectedItemProperty); } 
     set { SetValue(SelectedItemProperty, value); } 
    } 
} 
+0

後世のために:) –

関連する問題