11

WPFでコントロール(ComboBox、ListBoxなど)にDataBindingを実行する方法を示すために、誰かが私に良いリソースを教えてくれますか(または手がかりを投げてくれますか)?WinFormsの優れた機能がすべて奪われてしまったとき、私は少し戸惑いました。そもそも私はそれほど明るくはありません...

4

6 に答える 6

5

WPFデータバインディングについて私が見つけた最高のリソースは、BeaCostaのブログです。最初の投稿から始めて、先に読んでください。それは素晴らしいです。

于 2008-08-11T01:38:49.727 に答える
3

コードビハインド-リストボックスの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}"/>
于 2008-08-11T01:40:55.993 に答える
3

そして、上記が十分ではなかった場合に備えて、さらにいくつかのリンク:

WindowsPresentationFoundation-データバインディングのハウツートピック-MSDN
からの約30の「ハウツー」記事。
「このセクションのトピックでは、データバインディングを使用して、共通言語ランタイム(CLR)オブジェクトおよびXMLの形式でさまざまなデータソースからのデータに要素をバインドする方法について説明します。」

一度に1ステップずつWPFデータバインディングに移行する
-WPFの第一人者であるJoshSmith
による「この記事では、WPFデータバインディングの絶対的な基本について説明します。同じ単純なタスクを実行する4つの異なる方法を示します。各反復は、最もコンパクトなものに近づきます。 XAMLのみの実装が可能です。この記事は、WPFデータバインディングの経験がない人を対象としています。」

于 2008-08-11T04:36:48.790 に答える
3

Windows Client .Netのチュートリアル ビデオも同様に素晴らしいと思います。Dot Net Rocks TVも少し前に取り上げました。

于 2008-08-11T01:45:45.297 に答える
2

これがMSDNからのもう1つの優れたリソースです:データバインディングの概要

于 2008-08-11T05:51:39.093 に答える
2

次の 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 でバックアップできます。

または、代わりにUpdate Controls .NETを使用できます。これは、データ バインディングを置き換えるオープン ソース プロジェクトであり、INotifyPropertyChanged を必要としません。EmailAddresses プロパティをサポートするのに適したコレクションを使用できます。XAML は上記と同じように機能しますが、UpdateControls.XAML 名前空間をインポートし、{Binding ...} を {u:Update ...} に置き換えます。

于 2008-12-29T14:42:47.757 に答える