【问题标题】:How do I access navigation properties through XAML-based databinding?如何通过基于 XAML 的数据绑定访问导航属性?
【发布时间】: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


【解决方案1】:

您不直接绑定到Path=SelectedProject.Emp.EmployeetName 吗?

【讨论】:

  • 是的,就这样。我错过了“路径=”。我午睡的时间到了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-09-06
  • 2018-03-12
  • 1970-01-01
  • 2010-12-11
  • 2018-01-03
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多