Wpf 一个视图可以有两个视图模型作为其数据上下文吗?

Wpf 一个视图可以有两个视图模型作为其数据上下文吗?,wpf,xaml,binding,Wpf,Xaml,Binding,我在一个视图中有两个数据网格,但是作为这些数据网格的ItemsSource的集合在不同的视图模型中。那么,是否可以将这两个数据网格与两个不同视图模型中的集合绑定?您可以为每个数据网格而不是容器视图设置DataContext <Grid> <DataGrid ... DataContext="..." /> <DataGrid ... DataContext="..." /> </Grid> 或者不要使用DataContext并直接

我在一个视图中有两个数据网格,但是作为这些数据网格的ItemsSource的集合在不同的视图模型中。那么,是否可以将这两个数据网格与两个不同视图模型中的集合绑定?

您可以为每个数据网格而不是容器视图设置DataContext

<Grid>
   <DataGrid ... DataContext="..." />
   <DataGrid ... DataContext="..." />
</Grid>

或者不要使用DataContext并直接绑定到模型

<DataGrid ItemsSource="{Binding Source={StaticResource ...}}" />

选择一个结合了以下两者的视图模型:

public class ViewModelA {
    public ObservableCollection<CustomClass> Items { get; set; }
    /* properties, etc. */
}

public class ViewModelB {
    /* properties, etc. */
}

public class CombiningViewModel {
    public ViewModelA A { get; set; }
    public ViewModelB B { get; set; }
}
公共类ViewModelA{
公共ObservableCollection项{get;set;}
/*财产等*/
}
公共类ViewModelB{
/*财产等*/
}
公共类组合视图模型{
公共视图模型A{get;set;}
公共视图模型B{get;set;}
}
装订可以这样做

<DataGrid ItemsSource="{Binding A.Items}">
    <!-- Sample, not complete -->
</DataGrid>

不,不是直接的。但您有以下选择:

您可以将视图的DataCOntext设置为自身,然后通过单独的属性公开每个viewmodel并绑定到这些属性:

public class MyView : Window 
{
    public MyView()
    {
        this.DataContext = this;
    }

    public ViewModel1 FirstViewModel { get; set; }

    public ViewModel2 SecondViewModel { get; set; }

}
或者,您可以创建一个包装器viewmodel,该包装器扩展(继承)其中一个viewmodel,或者将它们包装起来,并显示相应的属性:

public class MyCompositeViewModel
{
    public ViewModel1 FirstViewModel { get; set; }

    public ViewModel2 SecondViewModel { get; set; }
}

+1在本例中,我还将选择复合视图模型。