1

WPF を使い始めて以来、データ バインディング機能を理解するのにまだ苦労しています。

複数列のリスト ボックスを使用しようとしていますが、XAMl は次のようになります。

<ListBox Name="RecordList">
    <ListView Name="RecordListView">
        <ListView.View>
             <GridView>
                <GridView.Columns>
                     <GridViewColumn Header="1" Width="Auto" DisplayMemberBinding="{Binding Path=Field1}" />
                     <GridViewColumn Header="2" Width="50" DisplayMemberBinding="{Binding Path=Field2}" />
                     <GridViewColumn Header="3" Width="100" DisplayMemberBinding="{Binding Path=Field3}" />
                </GridView.Columns>
           </GridView>
      </ListView.View>
 </ListView>
</ListBox>

リストから項目を入力するための C# コードを正しく取得できないのですか?

4

2 に答える 2

13

ざっくりまとめるとこんな感じです。

まず、バインディング用のデータを保持するモデルを定義します。

public sealed class MyListBoxItem
{
  public string Field1 {get;set;}
  public string Field2 {get;set;}
  public string Field3 {get;set;}
}

ここで、バインディングのためにこれらのモデルを保持するクラスが必要です。この型は、多くの場合、ViewModel と呼ばれます。ビューからのユーザー入力に基づいてバインドするためにビューに情報を提示します。そのパブリック プロパティは通常、ObservableCollections と DependencyProperties であるため、ViewModel の変更はビュー (UI) によって自動的に取得されます。

public sealed class MyViewModel
{
  public ObservableCollection<MylistBoxItem> Items {get;private set;}
  public MyViewModel()
  {
    Items = new ObservableCollection<MyListBoxItem>();
    Items.Add(new MyListBoxItem{Field1="One", Field2="Two",Filed3="Three"};
  }
}

UI のコード ビハインド (「ビュー」) 内で、ViewModel をインスタンス化し、それをビューの DataContext として設定します。

public MyView()
{
  this.DataContext = new MyViewModel();
}

これは、DataContext がビジュアル ツリーを "流れる" ため重要です。それが設定されているすべての子要素で使用できます。

アイテムを表示するには、ListView の ItemsSource を DataContext の Items プロパティにバインドする必要があります (これは理解済みです)。ListView 内の各行には、Items プロパティの個々の MyViewModel に設定された DataContext があります。したがって、各表示メンバーを MyListBoxItem のプロパティにバインドする必要があります。

<ListView Name="RecordListView" ItemsSource="{Binding Items}">
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="1" Width="Auto" DisplayMemberBinding="{Binding Path=Field1}" />
                <GridViewColumn Header="2" Width="50" DisplayMemberBinding="{Binding Path=Field2}" />
                <GridViewColumn Header="3" Width="100" DisplayMemberBinding="{Binding Path=Field3}" />
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

このプロセス全体をよりよく理解するには、ここで[MVVM]のタグが付いた評価の高い質問を検索してください。

また、バインディングのデバッグを支援するために、詳細なデータ バインディングのデバッグを構成します。 詳細なデータバインディング

于 2011-03-07T14:05:34.333 に答える
4

リストボックスとリストビューの両方を使用する必要はありません。データテンプレートでリストボックスを使用するか、グリッドビュー列でリストビューを使用してください。

以下のリンクをチェックして、リストボックスに適切に入力する方法を確認してください

http://www.c-sharpcorner.com/uploadfile/mahesh/wpflistbox08252008100659am/wpflistbox.aspx

http://www.wpftutorial.net/ListBoxDataTemplate.html

http://www.codeproject.com/KB/WPF/CustomListBoxLayoutInWPF.aspx

以下のリンクにアクセスして、wpf でのデータバインディングとデータテンプレートの強力な基盤を把握することを強くお勧めします。

http://msdn.microsoft.com/en-us/library/ms742521.aspx

http://www.codeproject.com/KB/WPF/GuidedTourWPF_4.aspx

http://www.wpftutorial.net/DataTemplates.html

于 2011-03-07T14:01:31.190 に答える