WPFでコントロール(ComboBox、ListBoxなど)にDataBindingを実行する方法を示すために、誰かが私に良いリソースを教えてくれますか(または手がかりを投げてくれますか)?WinFormsの優れた機能がすべて奪われてしまったとき、私は少し戸惑いました。そもそも私はそれほど明るくはありません...
6 に答える
WPFデータバインディングについて私が見つけた最高のリソースは、BeaCostaのブログです。最初の投稿から始めて、先に読んでください。それは素晴らしいです。
コードビハインド-リストボックスのDataContextをバインド先のコレクションと同じに設定します。
private void OnInit(object sender, EventArgs e)
{
//myDataSet is some IEnumerable
// myListBox is a ListBox control.
// Set the DataContext of the ListBox to myDataSet
myListBox.DataContext = myDataSet;
}
XAMLでは、リストボックスは「バインド」構文を使用して、バインドするプロパティを宣言できます。
<ListBox Name="myListBox" Height="200"
ItemsSource="{Binding Path=BookTable}"
ItemTemplate ="{StaticResource BookItemTemplate}"/>
そして、上記が十分ではなかった場合に備えて、さらにいくつかのリンク:
WindowsPresentationFoundation-データバインディングのハウツートピック-MSDN
からの約30の「ハウツー」記事。
「このセクションのトピックでは、データバインディングを使用して、共通言語ランタイム(CLR)オブジェクトおよびXMLの形式でさまざまなデータソースからのデータに要素をバインドする方法について説明します。」
一度に1ステップずつWPFデータバインディングに移行する
-WPFの第一人者であるJoshSmith
による「この記事では、WPFデータバインディングの絶対的な基本について説明します。同じ単純なタスクを実行する4つの異なる方法を示します。各反復は、最もコンパクトなものに近づきます。 XAMLのみの実装が可能です。この記事は、WPFデータバインディングの経験がない人を対象としています。」
Windows Client .Netのチュートリアル ビデオも同様に素晴らしいと思います。Dot Net Rocks TVも少し前に取り上げました。
これがMSDNからのもう1つの優れたリソースです:データバインディングの概要。
次の 3 つのことを行う必要があります。
- ComboBox の ItemsSource をオプションのリストにバインドします。
- SelectedItem を選択を保持するプロパティにバインドします。
- ComboBox.ItemTemplate を ComboBoxItem の DataTemplate に設定します。
したがって、たとえば、データ コンテキスト オブジェクトが電子メール アドレスを持つ人物であり、そのプライマリを選択したい場合は、次のシグネチャを持つクラスを使用できます。
public class EmailAddress
{
public string AddressAsString { get; set; }
}
public class Person
{
public IEnumerable<EmailAddress> EmailAddresses { get; }
public EmailAddress MainEmailAddress { get; set; }
}
次に、次のようなコンボ ボックスを作成できます。
<ComboBox ItemsSource="{Binding EmailAddresses}" SelectedItem="{Binding MainEmailAddress}">
<ComboBox.ItemTemplate>
<DataTemplate>
<ComboBoxItem Content="{Binding AddressAsString}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
ここで、INotifyPropertyChanged を Person と EmailAddress の両方に実装する必要があります。EmailAddresses コレクションの場合は、ObjservableCollection でバックアップできます。
または、代わりにUpdate Controls .NETを使用できます。これは、データ バインディングを置き換えるオープン ソース プロジェクトであり、INotifyPropertyChanged を必要としません。EmailAddresses プロパティをサポートするのに適したコレクションを使用できます。XAML は上記と同じように機能しますが、UpdateControls.XAML 名前空間をインポートし、{Binding ...} を {u:Update ...} に置き換えます。