所以我试图在WPF中学习MVVM设计模式,我想做以下几点:
在外部类中,我有一个ObservableCollection _students,它使用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");
}
}
一切都很好,但我想放置一个TextBox并将其设置为显示listview的所选项目的课程属性。这意味着我必须
我被困在2.任何帮助?
答案 0 :(得分:1)
假设您将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" });
您可以直接在View上将TextBox的Text属性绑定到SelectedItem。
<StackPanel Orientation="Horizontal">
<ListView x:Name="listView1" />
<TextBox Text="{Binding ElementName=listView1, Path=SelectedItem.Text}" />
</StackPanel>
答案 1 :(得分:1)
我会用另一种方式解决这个问题。
看看这个post
另一种方法是您的ViewModel包含一个Student属性(例如SelectedStudent),它绑定到listView的SelctedItem。然后你可以通过
来解决这个问题{Binding Path=SelectedStudent.Course}