2012-01-02 137 views
2

我有兩個DataGrid。 EmployeeGrid和WorkSessionsGrid。每個員工都有一個我希望用戶訪問的WorkSessions列表,方法是在EmployeeGrid中選擇一個應使WorkSessionsGrid爲選定的員工生成WorkSessions的項目。爲什麼以下不正確?將數據網格綁定到另一個數據網格的選定項目

<DataGrid Name="dg_2" ItemsSource="{Binding ElementName=dg_1, Path=SelectedItem.WorkSessions}"/> 

更新 我來,這個問題必須在其他層的一個結論。 下面是我的代碼的其餘部分,希望有人能夠幫助我。 我有遺漏的東西嗎?

代碼隱藏XAML

public partial class MainWindow : Window 
{ 
    public EmployeeViewModel EmployeeViewModel = new EmployeeViewModel(); 


    public MainWindow() 
    { 
     InitializeComponent(); 

     menu_employee.DataContext = EmployeeViewModel; 
     sp_employee.DataContext = EmployeeViewModel; 
     datagrid_employees.ItemsSource = EmployeeViewModel.EmployeesView; 
     sp_worksessions.DataContext = EmployeeViewModel.SelectedEmployee.WorkSessions; 
     menu_worksession.DataContext = EmployeeViewModel.SelectedEmployee.WorkSessions; 
     datagrid_worksessions.ItemsSource = EmployeeViewModel.SelectedEmployee.WorkSessions; 

    } 
} 

WorkSessionViewModel

class WorkSessionViewModel : ViewModelBase 
{ 
    private WorkSessions _workSessionsModel = new WorkSessions(); 
    public WorkSessions WorkSessionsView = new WorkSessions(); 

    private WorkSessionModel _selectedWorkSession = new WorkSessionModel(); 
    public WorkSessionModel SelectedWorkSession 
... 

WorkSessionModel

[Serializable] 
public class WorkSessions : ObservableCollection<WorkSessionModel> 
{ 
    public WorkSessions() 
    { 

    } 
} 
[Serializable] 
public class WorkSessionModel : INotifyPropertyChanged 
{ 
    private DateTime _dateTime; 
    private string _id; 
    private double _hours; 
    public WorkSessionModel() 
    { 
    } 
+0

通過不正確的你是指這不工作? – 2012-01-02 15:38:19

+0

是的,這是行不通的。我想也許我的錯誤在於我的EmployeeViewModel。它是否正確我的Viewmodel有一個 public ObservableCollection WorkSessions {get;組; }? – CodePrimate 2012-01-02 15:56:28

+0

@litemode:對不起,很晚迴應..我面臨着類似的問題..你最終解決了這個問題嗎?請回復。 – user1221765 2013-02-10 16:32:20

回答

0

嘗試綁定代替元素。

<DataGrid Content="{Binding ElementName=ListOfEmp, Path=SelectedItem.Name}" DataContext="{Binding}" /> 
0

XAML的這一位看起來相當正確,儘量debug the binding,有可能會像可視化樹斷裂或WorkSessions收集或許一些其他的問題,是一個領域,而不是財產等

如果有綁定錯誤請分享。

+0

WorkSessions應該是模型層中的公共ObservableCollection嗎? – CodePrimate 2012-01-02 16:04:09

+0

@litemode:它應該是一個公共[property](http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx)在你綁定的任何層(即任何'SelectedItem')上。你有沒有調試,你有什麼綁定錯誤? – 2012-01-02 16:06:23

+0

我放棄了試圖調試它。在這一點上,我簡直無法圍繞一個全新的概念,例如調試綁定。 – CodePrimate 2012-01-02 16:19:38

0

As @ H.B。已經正確指出,請使用您的Visual Studio的輸出窗口來查看任何綁定錯誤。他們會告訴你綁定是否失敗。如果您發現綁定錯誤,那麼您的綁定應解決兩個可能的問題...

  1. 數據來源不正確。是否爲該UI元素正確設置了數據上下文和項目源,例如DataGrid
  2. 綁定中屬性的路徑可能不正確。您的SelectedItem對象是否有任何屬性名稱爲WorkSessions?等等

除此之外,我們仍然不知道你的XAML是dg_1dg_2。你後面的代碼顯示不同的名字datagrid_employeesdatagrid_worksessions我猜。

0

您應該爲EmployeeViewModel添加一個名爲SelectedEmployee的項目,並將其與員工網格選定項目mode = TwoWay綁定。

然後你數據綁定第二電網應該是:

<DataGrid Name="dg_2" ItemsSource="{Binding Path=SelectedEmployee.WorkSessions}"/> 

由於兩個格柵是在同一個窗口,因此,你應該只設置的datacontext只爲窗口。在視圖模型的側面,您有2個依賴項屬性:EmployeeList,SelectedEmployee。而EmployeeList綁定到員工網格的ItemsSource。 SelectedEmployee綁定到員工網格上的SelectedItem。

相關問題