C# 来自同一视图WPF MVVM中多个ViewModels的绑定

C# 来自同一视图WPF MVVM中多个ViewModels的绑定,c#,wpf,mvvm,data-binding,datacontext,C#,Wpf,Mvvm,Data Binding,Datacontext,我有一个WPF MVVM项目,其中包括一个包含多个控件的视图 有一个DockPanel,它包含视图中的所有控件,其中DataContext指向MainViewModel类,在它内部有一个网格,DataContext指向其他对象ViewModel,它的属性包含在MainViewModel类中 现在,在网格中我有一个2个按钮围绕着WrapPanel,这些按钮有一个到属性的命令,该属性写在MainViewModel类中,当我按下它时,什么都不会发生(因为网格的DataContext是到其他对象的) 我

我有一个WPF MVVM项目,其中包括一个包含多个控件的视图

有一个DockPanel,它包含视图中的所有控件,其中DataContext指向MainViewModel类,在它内部有一个网格,DataContext指向其他对象ViewModel,它的属性包含在MainViewModel类中

现在,在网格中我有一个2个按钮围绕着WrapPanel,这些按钮有一个到属性的命令,该属性写在MainViewModel类中,当我按下它时,什么都不会发生(因为网格的DataContext是到其他对象的)

我需要命令留在MainViewModel类中,如何才能做到这一点

XAML:(仅限相关部分)


.......     
........
试试这个:

<Button Content="Add" Width="60" Margin="0,0,40,0" 
        Command="{Binding DataContext.AddConfidenceCommand, ElementName=MonitorParent}" />

或:


您可以使用
DockPanel
的名称进行如下绑定:

<DockPanel x:Name="MonitorParent" DataContext="{Binding MonitorMainViewModel}" LastChildFill="False" Width="1144" HorizontalAlignment="Left">
  .......     
<StackPanel>
    <ContentControl Visibility="{Binding Path=NoMonitorsMessageVisibility, Converter={StaticResource visibilityConverter}}">
        <StackPanel Width="804" Height="574">
            <Grid DataContext="{Binding CurrentMonitor}" Margin="10 0" Height="auto">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" MinHeight="23" />
                    <RowDefinition Height="Auto" MinHeight="23" />
                    <RowDefinition Height="Auto" MinHeight="23" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="140" />
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Grid.Row="15"  Content="Serial Number" x:Name="SerialNumber"   />
                <WrapPanel  DataContext="{Binding MonitorMainViewModel}" HorizontalAlignment="Center" Margin="0,10,0,10" Grid.ColumnSpan="2" Grid.Row="6" >
                    <Button Content="Add" Width="60" Margin="0,0,40,0" Command="{Binding ElementName=MonitorParent, Path=DataContext.AddConfidenceCommand}" />
                    <Button Content="Delete" Width="60" Margin="30,0,0,0" Command="{Binding ElementName=MonitorParent, Path=DataContext.DeleteConfidenceCommand}"/>
                </WrapPanel>

                 ........

.......     
........

我先回答:)
<Button Content="Add" Width="60" Margin="0,0,40,0" 
        Command="{Binding DataContext.AddConfidenceCommand, RelativeSource={RelativeSource AncestorType=DockPanel}}" />
<DockPanel x:Name="MonitorParent" DataContext="{Binding MonitorMainViewModel}" LastChildFill="False" Width="1144" HorizontalAlignment="Left">
  .......     
<StackPanel>
    <ContentControl Visibility="{Binding Path=NoMonitorsMessageVisibility, Converter={StaticResource visibilityConverter}}">
        <StackPanel Width="804" Height="574">
            <Grid DataContext="{Binding CurrentMonitor}" Margin="10 0" Height="auto">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" MinHeight="23" />
                    <RowDefinition Height="Auto" MinHeight="23" />
                    <RowDefinition Height="Auto" MinHeight="23" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="140" />
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Grid.Row="15"  Content="Serial Number" x:Name="SerialNumber"   />
                <WrapPanel  DataContext="{Binding MonitorMainViewModel}" HorizontalAlignment="Center" Margin="0,10,0,10" Grid.ColumnSpan="2" Grid.Row="6" >
                    <Button Content="Add" Width="60" Margin="0,0,40,0" Command="{Binding ElementName=MonitorParent, Path=DataContext.AddConfidenceCommand}" />
                    <Button Content="Delete" Width="60" Margin="30,0,0,0" Command="{Binding ElementName=MonitorParent, Path=DataContext.DeleteConfidenceCommand}"/>
                </WrapPanel>

                 ........