質問
WPF でコントロール (ComboBox、ListBox など) に DataBinding を行う方法を示すための適切なリソースを教えて (または手がかりを与えて) くれる人はいますか?WinForms の優れた点をすべて奪われてしまい、少し途方に暮れています。また、私はもともとそれほど聡明なわけではありません...
解決
チュートリアルビデオは次の場所にあります Windows クライアント .Net 同様に素晴らしい。 ドットネットロックスTV も少し前に取り上げました。
他のヒント
WPF データ バインディングに関して私が見つけた最良のリソースは次のとおりです。 ベア・コスタのブログ. 。最初の投稿から始めて読み進めてください。それは素晴らしいです。
背後のコード -- リスト ボックスの 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 は、「Binding」構文を使用してどのプロパティにバインドするかを宣言できます。
<ListBox Name="myListBox" Height="200"
ItemsSource="{Binding Path=BookTable}"
ItemTemplate ="{StaticResource BookItemTemplate}"/>
上記では十分でない場合に備えて、さらにいくつかのリンクもあります。
Windows Presentation Foundation - データ バインディングのハウツー トピック
- MSDN からの約 30 件の「ハウツー」記事。
このセクションのトピックでは、データ バインディングを使用して、共通言語ランタイム (CLR) オブジェクトおよび XML の形式でさまざまなデータ ソースのデータに要素をバインドする方法について説明します。」
WPF データ バインディングに向けて一歩ずつ前進
- WPF の第一人者による ジョシュ・スミス
「この記事では、WPF データ バインディングの絶対的な基本について説明します。同じ単純なタスクを実行する 4 つの異なる方法を示します。各反復は、可能な限り最もコンパクトな XAML のみの実装に近づきます。この記事は、WPF データ バインディングの経験がない人を対象としています。」
MSDN からの別の優れたリソースは次のとおりです。 データバインディングの概要.
行う必要があることが 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 を使用してバックアップできます。
または、代わりに使用できます コントロール .NET の更新. 。これはデータ バインディングを置き換えるオープン ソース プロジェクトであり、INotifyPropertyChanged は必要ありません。EmailAddresses プロパティをサポートするために意味のある任意のコレクションを使用できます。XAML は、UpdateControls.XAML 名前空間をインポートし、{Binding ...} を {u:Update ...} に置き換えることを除いて、上記と同じように機能します。