带有数据网格和TabControl的WPF MVVM主详细信息视图

时间:2011-07-14 08:47:44

标签: c# .net wpf mvvm binding

我正在尝试在WPF MVVM中实现Master详细信息视图。

在我的viewmodel中,我有一个可观察的“原因”集合。每个原因都有一个可观察的“解决方案”集合。

我将一个可编辑的Datagrid绑定到Cause并且它工作正常。但是当用户在DataGrid中选择一行时,我希望允许用户在TabControl中查看其关联的解决方案。

我应该怎么做呢?我应该在Viewmodel中创建一个属性CurrentCause并将其绑定到SelectedItem。在TabControl中我可以绑定到CurrentCause.Solutions。

这是一种最佳方法吗?请指教。谢谢!!

3 个答案:

答案 0 :(得分:2)

您可以使用元素绑定将TabControl的ItemsSource绑定为DataGrid的SelectedItem

<TabControl ItemsSource="{Binding ElementName=myDataGrid, Path=SelectedItem.Solutions}">

答案 1 :(得分:2)

您可以将IsSynchronizedWithCurrentItem设置为True并执行this之类的操作。

答案 2 :(得分:1)

我会将您的DataGrid绑定到一个Cause列表,将ModelItem绑定到Model中的SelectedCtem,将TabControl绑定到Solutions。然后你把所有东西都绑在MVVM中。

private Cause _currentCause;
public Cause CurrentCause
{
    get { return _currentCause; }
    set
    {
        if (_currentCause == value) return;
            CurrentSolution = _currentCause.Solutions;  //However you do this...
        _currentCause = value;

        RaisePropertyChanged("CurrentCause");
    }
}

private ObservableCollection<Cause> _causes;
public ObservableCollection<Cause> Causes
{
    get { return _causes; }
    set
    {
        _causes = value;
        RaisePropertyChanged("Causes");
    }
}
private ObservableCollection<Solution> _solutions;
public ObservableCollection<Solution> Solutions
{
    get { return _solutions; }
    set
    {
        _solutions = value;
        RaisePropertyChanged("Companies");
    }
}



<dg:DataGrid ItemsSource="{Binding Causes}" SelectedItem="{Binding CurrentCause}"...