无法从RadGridView GridViewDataColumn CellTemplate中绑定到ViewModel

时间:2015-03-27 14:32:11

标签: wpf xaml binding viewmodel radgridview

我有一个类型为telerikDocking的视图:RadDocumentPane。此视图中的第一个可视元素和所有其他可视元素的容器是一个带有x:Grid =" MainGrid"的网格。

如果我将Grid的一个属性绑定到ViewModel上的公共属性,这是它的DataContext,它可以工作并看到它。

在这个网格中是一个telerik:RadGridView,它的一个列是一个Delete按钮,其可见性属性绑定到GridviewRow的IsSelected属性。这也很好。

我需要能够根据ViewModel上公共属性中处理的其他条件覆盖按钮的可见性。为了实现这一点,我将按钮包装在StackPanel中,并尝试将其Visibility绑定到ViewModel的公共属性,无论我使用何种RelativeSource语法,我都无法访问VieModel上的该属性。

以下是XAML for delete按钮:

<telerik:GridViewDataColumn>
            <telerik:GridViewDataColumn.CellTemplate>
              <DataTemplate>
                <StackPanel Visibility="{Binding ???}">

                  <telerik:RadButton Width="70"
                                     Command="telerik:RadGridViewCommands.Delete"
                                     CommandParameter="{Binding}"
                                     Content="Delete"
                                     IsEnabled="{Binding UserHasCofundingRole}"
                                     Visibility="{Binding IsSelected,
                                                          RelativeSource={RelativeSource AncestorType={x:Type telerik:GridViewRow}},
                                                          Converter={StaticResource booleanToVisibilityConverter}}" />
                </StackPanel>
              </DataTemplate>
            </telerik:GridViewDataColumn.CellTemplate>
          </telerik:GridViewDataColumn>

以下是我为StackPanel的可见性尝试的所有绑定语法尝试,但没有一次尝试过ViewModel:

{Binding DataContext.DeleteButtonVisible, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerikDocking:RadDocumentPane}}, Converter={StaticResource booleanToVisibilityConverter}}
                    {Binding ViewModel.DeleteButtonVisible, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerikDocking:RadDocumentPane}}, Converter={StaticResource booleanToVisibilityConverter}}
                    {Binding ElementName=MainGrid, Path=DataContext.DeleteButtonVisible, Converter={StaticResource booleanToVisibilityConverter}}
                    {Binding ElementName=LayoutRoot, Path=ViewModel.DeleteButtonVisible, Converter={StaticResource booleanToVisibilityConverter}}
                    {Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=DataContext.DeleteButtonVisible, Converter={StaticResource booleanToVisibilityConverter}}

1 个答案:

答案 0 :(得分:1)

尝试像这样绑定:

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path= DataContext.YourPublicProp}

如果你在一个窗口或页面,或smt其他,替换&#34; UserControl&#34;正确的类型。