あなたはあまりにも拘束力があります。 SelectedValue
とSelectedValuePath
またはSelectedItem
と設定する必要があります。この場合、実際に特定のオブジェクトにバインドしようとしているようです。あなたはComboBox
があなたのBook
上Category
プロパティを設定し、現在Book
オブジェクトが実際にcategoryList
にありますCategory
インスタンスへの参照を持っている、あなたはバインディングSelectedItem
を使用してSelectedValue
とSelectedValuePath
のバインディングを削除する必要があります。持ってしようとしている場合
編集
リストソースのプロパティを使用してバインドされたアイテムをリンクする情報の共通部分を持っている場合SelectedValue
を使用するように設計され、これがどのように行われるかについて少しを展開します。たとえば、CategoryID
プロパティを持つBook
クラスがあるとします。この場合
public class Book
{
public string CategoryID { get; set; }
public string Title { get; set; }
}
public class CategoryID
{
public string ID { get; set; }
public string Name { get; set; }
}
、あなたはどうなる:
<ComboBox SelectedValue = "{Binding CategoryID}"
SelectedValuePath = "ID"
DisplayMemberPath = "Name" />
SelectedItem
を、一方、結合したインスタンスは、より正確に、実際の参照(または、あるオブジェクトを持っているときのためにありますバインドされたリストの項目に相当する)。
<ComboBox SelectedItem = "{Binding Category}"
DisplayMemberPath = "Name" />
しかし、それは、
これはBook
クラスがない限り動作しないことに注意することは非常に重要です:この場合 public class Book
{
public Category Category { get; set; }
public string Title { get; set; }
}
、あなたはどうなる:それでは、Book
クラスは、実際にこのようになりますと仮定しましょうリストにあるとおり、Category
という同じインスタンスへの参照があります。参照が異なる場合(たとえクラスの値が同じであっても)、ComboBox
はBook
で参照されているCategory
をリスト内に見つけることができないため、機能しません。
あなたがそれを上にバインドする方法(Category.ID
にバインドすることによって)の実際の問題は、あなたがスキームを混在させることです。参照がありますが、代わりにキーでバインドしようとしています。これはすべてあなたの参照に値を設定しようとすることです。あなたのクラスの参照を変更しようとしません。アダムさんが話してどのようなコードで記述するために
はい申し訳ありませんが、私はちょうど種類のそこにすべてを投げました。 :) SelectedValue + SelectedValuePathは機能しません。 SelectedItemはそれ自身のものでもありません。または、SelectedItem + SelectedValuePathのDougが以下のように表示されます。 Ergh。私はcategoryListのカテゴリが何らかの形で私の能力を妨害していると思います(もし私がちょうどその下のテキストフィールドのCategory.Nameに直接バインドすると、私は間違った値を取得します。)しかし、categoryListへのバインディングをコメントアウトすると、 )。 彼のデバッグの提案を試しに行く。ありがとう。 –
これは本当に役に立ちました、ありがとうございました。しかし、奇妙なことに私はisSynchronizedWithCurrentItem = Trueを使用する必要がありました(私は上記のようにSelectedItemを使用しています)。その部分を理解していない。 –
@Abby: 'Category'オブジェクトのこのリストを他のデータソースにバインドしていますか?もしそうなら、それは理にかなっています。 –