DataGridTemplateColumn中的命令绑定

Gia*_*cci 4 c# silverlight binding mvvm datagridtemplatecolumn

我正在开发一个Silverlight应用程序,它广泛使用Prism,MVVM模式和MEF.出于几个原因,我选择遵循View-first方法.

在其中一个视图中有一个DataGrid,该网格的一个列是DataGridTemplateColumn,它只有一个Button.

我想在Button上定义一个Command和一个CommandParameter.Command应该是ViewModel的DelegateCommand.CommandParameter应该是直接来自dataGrid的SelectedItems列表.

我已经尝试了几种方法来执行此操作,但Command或CommandParameter都为null.

它遵循我最初编写的代码:

<sdk:DataGridTemplateColumn>
    <sdk:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Width="15" Height="15" Content=">" 
                    Command="{Binding UpdateSearchParametersCommand}" 
                    CommandParameter="{Binding SelectedItems, ElementName=dataGrid}">
        </DataTemplate>
    </sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我最好的方法是什么?

提前谢谢,Gianluca.

Rac*_*hel 10

您当前的绑定指向DataGridRowItem.UpdateSearchParametersCommand.您需要将其更改为指向DataGrid.DataContext.UpdateSearchParametersCommand

<sdk:DataGrid x:Name=dataGrid>
    <sdk:DataGridTemplateColumn>
        <sdk:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Button Width="15" Height="15" Content=">" 
                        Command="{Binding DataContext.UpdateSearchParametersCommand, ElementName=dataGrid}" 
                        CommandParameter="{Binding SelectedItems, ElementName=dataGrid}">
            </DataTemplate>
        </sdk:DataGridTemplateColumn.CellTemplate>
    </sdk:DataGridTemplateColumn>
</sdk:DataGrid>
Run Code Online (Sandbox Code Playgroud)


Gia*_*cci 0

你们中的许多人都试图帮助我解决这个问题。谢谢你。不幸的是,提供的答案大多与 WPF 有关。

这是我解决问题的方法:

<helpers:BindingHelper.Binding>
<helpers:BindingList>
     <helpers:RelativeSourceBinding TargetProperty="Command" Path="DataContext.ToggleDataArchiveInheritanceCommand" RelativeMode="FindAncestor" AncestorType="ChildWindow" />
</helpers:BindingList>
</helpers:BindingHelper.Binding>
Run Code Online (Sandbox Code Playgroud)

好吧,这来自同一个应用程序的另一个点,但原理是一样的。如果在 a 内部定义了绑定,则在 Silverlight 中访问通常超出范围的其他元素(因为它们不是 DataTemplate 的一部分)的唯一方法是遍历 xaml 对象树。这就是 BindingHelper 的作用。

在这里发帖是因为我希望这些信息对其他人有用。

干杯,

詹卢卡