【发布时间】:2016-10-21 20:01:25
【问题描述】:
我正在尝试学习 WPF 和 MVVM,目前正在努力解决一些数据绑定问题。我有一个 ComboBox,其中包含一个可观察的项目集合,以及一个绑定到 ComboBox 的 SelectedItem 并显示 EmployeeID 值的 TextBox。如果可能,我想通过导航属性显示与 EmployeeID 值相对应的员工姓名,但不确定如何修改 XAML 以允许这样做。
public class Project
{
public int ProjectID;
public string ProjectName;
public int EmployeeID;
public Employee Emp;
}
public class Employee
{
public int EmployeeID;
public string EmployeeName;
}
主视图 XAML
<ComboBox x:Name="cbxProjects" Width="75" Height="20"
ItemsSource="{Binding Projects}"
SelectedValue="{Binding Path=SelectedProject}"
DisplayMemberPath="ProjectName" />
<TextBox x:Name="tbxEmployee" Height ="20" Width="100" BorderThickness="1"
Text="{Binding Path=SelectedProject.EmployeeID}"/>
主视图模型
private ObservableCollection<Project> _projects;
private Project _selectedProject;
public ObservableCollection<Project> Projects
{
get { { return _projects; } }
}
public Project SelectedProject
{
get { return _selectedProject; }
set
{
if (_selectedProject != value)
{
_selectedProject = value;
NotifyPropertyChanged("SelectedProject");
}
}
}
【问题讨论】:
-
ObservableCollection 属性应该是只读的。如果您是 MVVM 新手,请获取一个名为 Snoop 的应用程序。这是无价的。现在,为什么您的 Project 类没有 Employee 类型的属性?这就是这样做的方法。否则,在 SelectedProject 的 setter 中获取员工。
-
很高兴知道(只读),我一定会按照建议检查 Snoop,谢谢。此代码仅作为示例,我使用的是 EF,并且导航属性包含在实体中。在 ViewModel 中,我可以从 Project 实体导航到 Employee 实体,但不确定如何在 XAML 中绑定?
标签: c# wpf xaml mvvm data-binding