質問

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 つあります。

  1. ComboBox の ItemsSource をオプションのリストにバインドします。
  2. SelectedItem を選択内容を保持するプロパティにバインドします。
  3. 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 ...} に置き換えることを除いて、上記と同じように機能します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top