0

我有一个 XAML 树,如下所示:

<Window>
    <Grid>
        <DockPanel>
               <DataGrid>
                      <DataGrid.Resources>
                              <CheckBox Command="{Binding Command}" CommandParameter="??" />
                      </DataGrid.Resources>
               </DataGrid>
              <StackPanel>
                    <ChartLegend>
                    </ChartLegend>
                    <DataChart>
                    </DataChart>
              </stackPanel>
        </DockPanel>
    </Grid>
</Window>

我想从on开始有DataChart对象。CommandParameterViewModelCommandDataGrid

我的发现:

我将DockPanel对象作为CommandParameter,然后我必须应用方法FindName("")来获取DataChart. 并做进一步的修改。

但我想要DataChart直接的对象,以避免TypeCasting或搜索树。

4

1 回答 1

0

您可以将数据图表作为命名资源保留在DockPanel资源中,并使用静态资源绑定到命令参数。然后使用ContentControl它来托管它。

像这样...

    <DockPanel>
            <DockPanel.Resources>
                 <DataChart x:Key="MyDataChart">
                 </DataChart>
            </DockPanel.Resources>
            <DataGrid>
                   <DataGrid.Resources>
                           <CheckBox 
                                 Command="{Binding Command}"
                                 CommandParameter="{StaticResource MyDataChart}" />
                   </DataGrid.Resources>
            </DataGrid>
           <StackPanel>
                 <ChartLegend>
                 </ChartLegend>
                 <ContentControl Content="{StaticResource MyDataChart}"/>
           </stackPanel>
     </DockPanel>

希望您不会使用相同 MyDataChart的主机托管到另一个区域(因为这会导致“视觉树父级断开”错误)。

虽然我必须问你这个……为什么CheckBox你的DataGrid资源里有一个孤独?

您和我的解决方案也破坏了 MVVM,因为我们正在向视图模型提供 UI 控件(图表控件)。

于 2011-09-19T09:17:07.437 回答