2016-10-21 12 views
0

私は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");      
     } 
    } 
} 
+1

ObservableCollectionプロパティは読み取り専用である必要があります。 MVVMの場合、noobにはSnoopというアプリケーションがあります。それは非常に貴重です。さて、あなたのProjectクラスにEmployee型のプロパティがないのはなぜですか?それはそれを行う方法です。それ以外の場合は、SelectedProjectのセッターで従業員を取得します。 – Will

+0

それは知っておいて(読んで)良いです、と私は間違いなく提案されたようにスヌープをチェックアウトします、ありがとう。このコードは単なる例であり、私はEFを使用しており、ナビゲーションプロパティはエンティティに含まれています。 ViewModelでは、ProjectエンティティからEmployeeエンティティに移動できますが、XAMLでバインディングを行う方法はわかりません。 – rudeboy

答えて

0

は、あなただけの代わりにPath=SelectedProject.Emp.EmployeetNameに結合しませんか?

+0

はい、そうです。私は "Path ="が欠けていた。私の昼寝の時間。ありがとう。 – rudeboy

関連する問題