0

私はこれを持っています:

public MyView: UserControl
{
  public IList<Person> PersonList { get; set; } 

  public MyView()
  {
   //code
  }

  public void Display(MyData myData)
  {
    DataContext=myData;
  }
  //code
}

このためのXAMLには、ComboBoxが含まれています。

ItemsSource="{Binding RelativeSource={RelativeSource Self}, Path=PersonList}"

何らかの理由でこれは機能せず、コンボボックスにデータが入力されません(ただし、コードビハインドを使用してcomboBox.ItemsSource = PersonListと言うと、コンボボックスにデータが入力されます)。

何か案は ?

よろしく、MadSeb

4

3 に答える 3

0

プロパティはprivateに設定されており、DataContextを設定していることを確認してください。

* 編集 *

上記で行った変更に基づいて、データコンテキストを誤って設定しています。「PersonList」はIList<>MyViewクラスにありますが、データコンテキストを別のものに設定しています。

MyView内のPersonListにアイテムを追加して設定してみてください。this.DataContext = this; また、提案されているように、に切り替えてIList<>くださいObservableCollection<>

また、Model View ViewModel(MVVM)アプローチを読むことを強くお勧めします。それは大いに役立ちます。Josh Smithには、MVVMアプローチに関する優れた記事がたくさんあります(そして、それについても優れた本を書いています)。

これが彼のブログへのリンクです。彼の本もそこにリンクされています。

于 2010-11-08T15:24:01.023 に答える
0

プロパティが変更されたイベントを発生させていないことが原因だと思います。プロパティの値が最初に設定されたときにUIに通知しないと、バインディングは更新されません。インターフェイスを調べINotifyPropertyChangedて、クラスに実装します。

同様に、IListプロパティがObservableCollection実装されていないか、実装されていないINotifyCollectionChanged場合、リストにアイテムを追加すると、データバインドされたUIはこれを反映しません。

于 2010-11-08T15:42:01.800 に答える
0

あなたの拘束力のある声明が問題だと思います。
「{BindingRelativeSource={RelativeSource Self}、Path = PersonList}」は、コンボボックス自体で「PersonList」を探しています。

出力ウィンドウにバインディングエラーが表示されていますか?

理想的には、DataContext(MyData)のプロパティにバインドする必要があります

于 2010-11-08T18:14:23.033 に答える