RadGridViewRow上RadButton的Multibinding Visibility属性

时间:2015-03-30 18:33:52

标签: wpf data-binding radgridview

我需要能够将放置在RadGridView行上的RadButton的Visibility属性多重绑定到GridViewRow的“IsSelected”属性和ViewModel上的Public属性(在本例中称为“OtherValue”)。这样做的目的是仅显示所选行上的[删除]按钮,但也可以根据某些业务规则通过ViewModel中的自定义代码覆盖它。

有关多路转换器绑定语法的任何建议吗?我目前有以下内容:

              <telerik:GridViewDataColumn>
            <telerik:GridViewDataColumn.CellTemplate>
              <DataTemplate>
                <telerik:RadButton Width="70"
                                   Command="telerik:RadGridViewCommands.Delete"
                                   CommandParameter="{Binding}"
                                   Content="Delete">

                  <telerik:RadButton.Visibility>
                    <MultiBinding Converter="{StaticResource BooleanToVisibilityMultiValueConverter}">
                      <Binding Path="IsSelected" />
                      <Binding Path="OtherValue" />
                    </MultiBinding>
                  </telerik:RadButton.Visibility>

                </telerik:RadButton>
              </DataTemplate>

            </telerik:GridViewDataColumn.CellTemplate>
          </telerik:GridViewDataColumn>

1 个答案:

答案 0 :(得分:0)

警告:我从未使用任何Telerik控件。这个答案可能是正确的 - ish 而不是死钱,但应该有希望给你一些概念:

<DataTemplate>
    <telerik:RadButton Width="70" Command="telerik:RadGridViewCommands.Delete" CommandParameter="{Binding}" Content="Delete">
        <telerik:RadButton.Visibility>
            <MultiBinding Converter="{StaticResource BooleanToVisibilityMultiValueConverter}">
                <Binding ElementName="MyRadGridView", Path="Rows[0].IsSelected" />
                <Binding Path="OtherValue", RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:RadGridView}} />
            </MultiBinding>
         </telerik:RadButton.Visibility>
     </telerik:RadButton>
</DataTemplate>

您需要为RadGridView提供一个名称,该名称将替换MyRadGridView。据我所知,你可以使用Row的索引绑定一个Row IsSelected属性。

由于您的Button在DataTemplate中,我认为您可能需要使用RelativeSource / FindAncestor挖掘回DataContext。如果它没有绑定RadGridView,你总是可以尝试用Window / UserControl替换它/无论你的RadGridView是什么。