4

私は新しいプロジェクトのcaliburn.microフレームワークを試していますが、私はListPicker(ツールキットのもの)をバインドすることに固執しています。コントロールを単純なDropDownに変更すると、すべてが正常に機能します。私はので、デフォルトの条約、ドロップダウンが正常に動作していることを前提としてい はhereを実装:WP7のListPickerのcaliburn.microバインディング規約

AddElementConvention<Selector>(Selector.ItemsSourceProperty, "SelectedItem", "SelectionChanged") 
    .ApplyBinding = (viewModelType, path, property, element, convention) => { 
     if (!SetBinding(viewModelType, path, property, element, convention)) 
      return false; 

     ConfigureSelectedItem(element, Selector.SelectedItemProperty,viewModelType, path); 
     ApplyItemTemplate((ItemsControl)element, property); 

     return true; 
    }; 

ListPickerセレクタを実装していないので、私は私のブートストラップでカスタム規則を追加しようとしました:

static void AddCustomConventions() { 
    AddElementConvention<ListPicker>(ListPicker.ItemsSourceProperty, "SelectedItem", "SelectionChanged") 
     .ApplyBinding = (viewModelType, path, property, element, convention) => { 
      ConventionManager.ConfigureSelectedItem(element, ListPicker.SelectedItemProperty,viewModelType, path); 
      return true; 
     }; 
} 

残念ながら、それは動作しません。手伝ってくれますか?

答えて

8

私はこの慣習で私の問題を解決しました。

ConventionManager.AddElementConvention<ListPicker>(ListPicker.ItemsSourceProperty, "SelectedItem", "SelectionChanged") 
    .ApplyBinding = (viewModelType, path, property, element, convention) => 
    { 
     if (ConventionManager.GetElementConvention(typeof(ItemsControl)).ApplyBinding(viewModelType, path, property, element, convention)) 
     { 
      ConventionManager.ConfigureSelectedItem(element, ListPicker.SelectedItemProperty, viewModelType, path); 
      return true; 
     } 
     return false; 
    }; 

さらに、別の問題がありました。私のSelectedItemプロパティはnullを返しましたが、Itemsプロパティはnull値を含んでいませんでした。選択した項目が無効であるという例外があります。これはリストに含まれていないためです。

関連する問題