2013-03-27 26 views
5

私はうまく動作するカスタムスタイルのコンボボックスを持っています。これは、ユーザーコントロールの内部に配置され、データ構造にバインドされます。 DisplayMemberPathを使用して、Combobox TextBoxの要素を1つだけ表示します。 ComboBoxスタイルはMSDNから取得され、何度も使用されています。したがって、ここには表示されません。wpfデバッグエラー出力System.WIndows.Dataエラー25

<UserControl x:Class="wpf.projext1.MyComboBox" 
     x:Name="MyControl" 
     ... 
    <ComboBox Style="{StaticResource ComboBoxStyle}" 
        Text="{Binding ElementName=MyControl, Path=Text}" 
        IsEditable="True" 
        IsTextSearchEnabled="False" 
        StaysOpenOnEdit="True" 
        ItemsSource="{Binding ElementName=MyControl, Path=MyItemsSource}" 
        DisplayMemberPath="Name" 
    </ComboBox 

私は出力ウィンドウを取り込む次迷惑なエラーメッセージが表示されます:私は

DisplayMemberPath="Name" 

を残せば

System.Windows.Data Error: 25 : Both 'ContentTemplate' and 'ContentTemplateSelector' are set; 'ContentTemplateSelector' will be ignored. ComboBoxItem:'ComboBoxItem' (Name='') 

...エラー25についてのデバッグ出力が表示されません。しかし、私は間違いなくDiplayMemberPath = "Name"が必要です! これを修正するアイデアがありますか?

+0

スタイル 'ComboBoxStyle'では、コンボボックスのために' ItemTemplate'を設定している可能性があります。したがって、このエラー。 –

答えて

7

解決済み:TextSearchが有効になっていても、TextSearch添付プロパティを使用してください。

TextSearch.TextPath="Name" 
+0

良い回避策。ここでうまくいく:) –

11

DisplayMemberPathItemTemplateの両方を同時に設定することはできません。

DisplayMemberPathは、オブジェクトを表示するときにどのプロパティを表示するかをItemsControlに伝えるために使用されます。すでにItemTemplateのカスタムを渡している場合は、を選択してItemTemplate内のオブジェクトを表示できるので、このフィールドを設定する必要はありません。

MSDNのデフォルトのComboboxスタイルでもItemTemplateが設定されているため、これが原因でエラーが発生している可能性があります。

+0

私は、ComboboxItemsを表示するために使用されるitemtemplateを持っています。 editboxの内容を表示するためにも使用する必要がありますか? – deafjeff

+0

DisplayMemebrPathを設定すると、コンボボックスはうまく動作します。私はそれを残して、エディットボックスは、デフォルト(クラス名)の文字列を表示します。 DisplaymemebrPathの設定は、ComboboxItemのItemtemplateを設定するのに役立ちます。だからあなたが示唆したように、一緒に置く方法を説明できますか? – deafjeff

+0

エディットボックスにItemtemplateで定義されているようなComboboxItemが表示されないことを追加する必要があります。これは、 "名前"のメンバーを表示します。 ItemTemplateには、各アイテムの「名前」「年齢」「住所」などが表示されます。 – deafjeff