このアプリケーションには、ComboBoxリストなどのデータディクショナリとして機能する非常に大きなデータセットがあります。このデータは静的にキャッシュされ、2つの変数からキーオフされるため、ComboBoxから派生して公開されるコントロールを作成するのが賢明だと思いました。 DPとしての2つのキー。これらの2つのキーに適切な値がある場合、対応するデータディクショナリリストからComboBoxのItemsSourceを自動的に設定します。また、コンストラクターのSelectedValuePathとDisplayMemberPathをそれぞれCodeとDescriptionに自動的に設定します。
データディクショナリリストのItemsSource内のアイテムが常にどのように見えるかの例を次に示します。
public class DataDictionaryItem
{
public string Code { get; set; }
public string Description { get; set; }
public string Code3 { get { return this.Code.Substring(0, 3); } }
}
Codeの値は常に4文字の長さですが、3文字だけバインドする必要がある場合もあります。したがって、Code3プロパティ。
ItemsSourceを設定するためのカスタムコンボボックス内のコードは次のようになります。
private static void SetItemsSource(CustomComboBox combo)
{
if (string.IsNullOrEmpty(combo.Key1) || string.IsNullOrEmpty(combo.Key2))
{
combo.ItemsSource = null;
return;
}
List<DataDictionaryItem> list = GetDataDictionaryList(combo.Key1, combo.Key2);
combo.ItemsSource = list;
}
さて、私の問題は、XAMLのSelectedValuePathをCode3に変更すると、機能しないことです。SelectedValueにバインドすると、DataDictionaryItemから完全な4文字のコードが取得されます。SelectedValuePathが変更され、サイコロがない場合でも、SetItemsSourceを再実行してみました。
カスタムコンボボックスをウェイクアップさせ、XAMLでオーバーライドされた場合に提供されるSelectedValuePathを使用するために、私が何をする必要があるかを誰かが理解できますか?SelectedValueバインドされたビジネスオブジェクトのプロパティセッターの値を微調整することはオプションではありません。
XAMLがフォームでコンボボックスを検索する方法は次のとおりです。
<c:CustomComboBox Key1="0" Key2="8099" SelectedValuePath="Code3" SelectedValue="{Binding Thing}"/>
編集:コードでスヌープを実行したところ、SelectedValuePathがコードであると表示されます...Code3に設定されていないようです...Zuh?