wpfでユーザコントロールを作成しました。これはテキストボックスとリストビューで構成されています。今、私はこのコントロールを使用するフォームからクラスビューをリストビューにバインドしたいと思います。ですから、基本的には、リストビューのバインディングを動的に設定したいと思います。クラスオブジェクトをwpfのリストビューにバインドする
これは簡単かもしれませんが、私はこれを私にとって巨大な仕事にしているwpfには新しいです。これを解決する方法を提案してください。
wpfでユーザコントロールを作成しました。これはテキストボックスとリストビューで構成されています。今、私はこのコントロールを使用するフォームからクラスビューをリストビューにバインドしたいと思います。ですから、基本的には、リストビューのバインディングを動的に設定したいと思います。クラスオブジェクトをwpfのリストビューにバインドする
これは簡単かもしれませんが、私はこれを私にとって巨大な仕事にしているwpfには新しいです。これを解決する方法を提案してください。
ListView
のItemsSource
プロパティをクラスインスタンスのコレクションにバインドする必要があります(ObservableCollectionを使用することをお勧めします)。たとえば、ListView
のDataContext
にコレクションを配置することができます。そして、結合が可能になるだけで
<ListView ItemsSource={Binding} .../>
あなたのUserControl
が必要とUserControl
のDataContext
に、このクラスのインスタンスを渡すことができ、他のオブジェクトとともに、このコレクションを格納するためのクラスを作成することがより有用です。これはMVVMパターンを指します。
EDIT
あなたはDataContextのいずれかでコードビハインドまたはXAMLで設定することができます。我々は、コレクションを持つクラスを持っているとしましょう:
public class ViewModel
{
public ViewModel()
{
Products = new ObservableCollection<Product>()
{
new Product("book"),
new Product("chair"),
new Product("table"),
new Product("bookshelf"),
}
}
ObservableCollection<Product> Products { get; set; }
}
は、ここでは、コードにUserControlのDataContextのを設定する方法は次のとおりです。
ユーザーコントロールは、ユーザーコントロールのインスタンスであるuserControl.DataContext = new ViewModel();
。ここで
は、XAMLでで行う方法は次のとおりです。
<UserControl ...
xmlns:vm="namespace_containing_class_ViewModel">
<UserControl.DataContext>
<!-- Following line instantiates the ViewModel class and calls its parameterless constructor -->
<vm:ViewModel />
</UserControl.DataContext>
...
<ListView ItemsSource="{Binding Products}"/>
...
</UserControl>
両方の変異体はまったく同じことを行います。 ItemsSource="{Binding Products}"
は、Binding.Path
プロパティが "Products"に設定され、このパスがListViewのDataContextで検索されることを意味します。 ListViewのDataContextが上記のように明示的に設定されていない場合、DataContextはその親のDataContextと同じです。親のDataContextが設定されていない場合、親のDataContextなどと同じです。したがってこの場合、ListViewのDataContextはUserControlのDataContextと同じで、ViewModelクラスのインスタンスであり、Productのコレクションを含みます。タダ! :)
DataContextを設定するサンプルコードを用意してください。 DataContextが設定されると、ItemsSource = {Binding}がバインディングを処理しますか? – Harsh
私の編集を参照してください – EvAlex
ありがとう@EvAlex。 :) – Harsh