0

だから私はWPFでMVVMの設計パターンを学ぼうとしています。私は次のことをしたいです:

外部クラスには、MVVM デザイン パターンを使用して WPF ウィンドウのリストビューにバインドされた ObservableCollection _students があります。リストビューには生徒の名前と年齢のみが表示されます。

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Course { get; set; }
    public DateTime JoiningDate { get; set; }
}


public class ViewModel : INotifyPropertyChanged
{
    private ObservableCollection<Student> _students;

    protected void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged!=null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public ObservableCollection<Student> Students
    {
        get
        {
            return _students;
        }
        set
        {
            _students = value;
            NotifyPropertyChanged("Students");
        }
    }

すべて良いですが、TextBox を配置して、リストビューの選択した項目のコース プロパティを表示するように設定したいと思います。これは私がしなければならないことを意味します

  1. リストビューの選択されたインデックスを取得します (ok)
  2. textbox.Text プロパティを Students[そのインデックス].Course にバインドします

私は 2 で立ち往生しています。

4

2 に答える 2

1

SampleData以下のようなタイプのコレクションにリストビューをバインドするとします。

SampleData.cs

public class SampleData
{
    public int Id { get; set; }

    public string Text { get; set; }

    public decimal Value { get; set; }
}

次に、ListView ItemsSource をコレクションにバインドします。WItemsSource プロパティを ViewModel のプロパティにバインドするか、以下のコードのようにコード ビハインドでバインドするかは関係ありません。

var source = new List<SampleData>();

source.Add(new SampleData() { Id = 1, Text = "AAA" });
source.Add(new SampleData() { Id = 2, Text = "BBB" });
source.Add(new SampleData() { Id = 3, Text = "CCC" });
source.Add(new SampleData() { Id = 4, Text = "DDD" });
source.Add(new SampleData() { Id = 5, Text = "EEE" });

ビューで、TextBox の Text プロパティを SelectedItem に直接バインドできます。

<StackPanel Orientation="Horizontal">
    <ListView x:Name="listView1" />

    <TextBox Text="{Binding ElementName=listView1, Path=SelectedItem.Text}" />
</StackPanel>
于 2012-11-02T10:25:40.400 に答える
1

私は別の方法でこれを解決します。

この投稿を見てください 。

もう 1 つの方法は、ListView の SelctedItem にバインドされる Student プロパティ (SelectedStudent など) が ViewModel に含まれていることです。次に、これを次の方法で処理できます

{Binding Path=SelectedStudent.Course}
于 2012-11-02T10:25:53.067 に答える