如何在WPF MMVM设计中绑定textbox.Text属性

如何在WPF MMVM设计中绑定textbox.Text属性,wpf,mvvm,Wpf,Mvvm,因此,我试图学习WPF中的MVVM设计模式,我想做以下工作: 在外部类中,我有一个ObservableCollection,它使用MVVM设计模式绑定到WPF窗口上的listview。列表视图仅显示学生的姓名和年龄 public class Student { public string Name { get; set; } public int Age { get; set; } public string Course { get; set; } public

因此,我试图学习WPF中的MVVM设计模式,我想做以下工作:

在外部类中,我有一个ObservableCollection,它使用MVVM设计模式绑定到WPF窗口上的listview。列表视图仅显示学生的姓名和年龄

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");
        }
    }
公共班级学生
{
公共字符串名称{get;set;}
公共整数{get;set;}
公共字符串课程{get;set;}
public DateTime JoiningDate{get;set;}
}
公共类视图模型:INotifyPropertyChanged
{
私立大学学生;
受保护的void NotifyPropertyChanged(字符串propertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
}
}
公选学生
{
得到
{
返回学生;
}
设置
{
_学生=价值观;
通知财产变更(“学生”);
}
}
很好,但我想放置一个文本框,并将其设置为显示listview所选项目的课程属性。这意味着我必须

  • 获取listview的选定索引(确定)
  • 将textbox.Text属性绑定到学生[该索引].Course

  • 2.有什么帮助吗?

    假设您将listview绑定到一个类型为
    SampleData
    的集合,如下所示:

    SampleData.cs

    public class SampleData
    {
        public int Id { get; set; }
    
        public string Text { get; set; }
    
        public decimal Value { get; set; }
    }
    
    然后将ListView ItemsSource绑定到集合。无论是将ItemsSource属性绑定到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" });
    
    var source=newlist();
    Add(new SampleData(){Id=1,Text=“AAA”});
    Add(newsampledata(){Id=2,Text=“BBB”});
    Add(newsampledata(){Id=3,Text=“CCC”});
    Add(newsampledata(){Id=4,Text=“DDD”});
    Add(newsampledata(){Id=5,Text=“EEE”});
    
    您可以直接在视图上将TextBox的Text属性绑定到SelectedItem

    <StackPanel Orientation="Horizontal">
        <ListView x:Name="listView1" />
    
        <TextBox Text="{Binding ElementName=listView1, Path=SelectedItem.Text}" />
    </StackPanel>
    

    我会用另一种方法解决这个问题

    看看这个

    另一种方法是,ViewModel包含一个Student属性(例如SelectedStudent),该属性绑定到listView的SelctedItem

    {Binding Path=SelectedStudent.Course}
    

    不确定语法,但您可以将
    文本框
    绑定到
    列表框
    SelectedValue
    ——尽管我认为这不起作用。