UI 对象,位于 XAML 树的同一级别,作为 CommandParameter

发布于 2024-12-05 04:37:02 字数 1031 浏览 1 评论 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>

我希望将 DataChart 对象作为 ViewModel 上的 Command 上的 CommandParameter 数据网格

我的发现:

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

但我想要直接使用 DataChart 对象,以避免 TypeCasting 或在树中搜索。

I have an XAML tree as follows:

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

I want to have DataChart object as CommandParameter on ViewModel from a Command on DataGrid.

My Findings:

I'm getting DockPanel object as CommandParameter, then I have to apply method FindName("") to get the DataChart. And do further modifications.

But I want the DataChart object directly, to avoid TypeCasting or searching down the Tree.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷…雨湿花 2024-12-12 04:37:02

您可以将数据图表保留为 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>

希望您不会使用 same MyDataChart 托管到另一个区域(因为这会导致“可视树父级断开连接”错误)。

尽管我必须问你这个问题...为什么你的 DataGrid 资源中有一个孤独的 CheckBox

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

You can keep datachart as a named resource in your DockPanel resources and use static resource binding to command parameter. Then use ContentControl to host it.

like this...

    <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>

Hoping that you wont use same MyDataChart to host to another area (as that would result in "visual tree parent disconnect" error).

Although I must ask you this... why is there a lonely CheckBox in your DataGrid resources?

Also your's and mine solution breaks MVVM because we are supplying a UI control (Chart control) to a View Model.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文