私はWPFとMVVMを学び、現時点でいくつかのデータバインディングに苦労しています。私は、プロジェクトの観測可能なコレクションを含むComboBoxとComboBoxのSelectedItemにバインドされ、EmployeeID値を表示するTextBoxを持っています。可能であれば、ナビゲーションプロパティを使用してEmployeeID値に対応する従業員名を表示したいが、XAMLを変更する方法についてはわからない。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;
}
MAINVIEW 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}"/>
MainViewModel
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の場合、noobにはSnoopというアプリケーションがあります。それは非常に貴重です。さて、あなたのProjectクラスにEmployee型のプロパティがないのはなぜですか?それはそれを行う方法です。それ以外の場合は、SelectedProjectのセッターで従業員を取得します。 – Will
それは知っておいて(読んで)良いです、と私は間違いなく提案されたようにスヌープをチェックアウトします、ありがとう。このコードは単なる例であり、私はEFを使用しており、ナビゲーションプロパティはエンティティに含まれています。 ViewModelでは、ProjectエンティティからEmployeeエンティティに移動できますが、XAMLでバインディングを行う方法はわかりません。 – rudeboy