2

我尝试IsEnabled在上下文菜单项中绑定属性。上下文菜单位于 Devexpress 中GridControl.View

我认为问题出在 DataContext 中。barbutton 项正在网格的 DataContext 中搜索属性HasPermissionDelete。但这不是视图模型的数据上下文。我的财产HasPermissionDelete在 ViewModel 上。

我正在使用 caliburn.micro。

你能帮我修复这个绑定吗?

我的xml代码:

<dxg:GridControl.View>
    <dxg:TableView x:Name="gridTable" AllowSorting="True" NavigationStyle="Row" MultiSelectMode="Row" AutoWidth="True" AllowEditing="False" AllowFilterEditor="True" AllowDrop="True" AllowGrouping="True" ShowGroupPanel="False" AllowMoveColumnToDropArea="True" SelectedRowsSource="{Binding SelectedUsers}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="RowDoubleClick">
                <cal:ActionMessage MethodName="Edit" />
            </i:EventTrigger>

            <i:EventTrigger EventName="Loaded">
                <cal:ActionMessage MethodName="InitializePrintableSource" >
                    <cal:Parameter Value="{Binding ElementName=gridTable}"></cal:Parameter>
                </cal:ActionMessage>
            </i:EventTrigger>
        </i:Interaction.Triggers>

        <dxg:TableView.RowCellMenuCustomizations>
            <dxb:BarButtonItem x:Name="btnDelete" Content="{lex:LocText Translations:Delete, Assembly=Prosa.Common.Modules.UserManagement}" IsEnabled="{Binding Path=HasPermissionDelete}"/>
        </dxg:TableView.RowCellMenuCustomizations>
    </dxg:TableView>
</dxg:GridControl.View>
4

1 回答 1

1

即使您使用 Caliburn Micro,您仍然可以回退到标准 XAML 绑定。我将假设您的 DevExpress DataGrid 位于一个简单的 Grid 中,它是您的 Page 或 UserControl 的根元素。所以,你会有这样的结构:

<Grid x:Name="root">

      <dxg:GridControl>
       ...
       (your GridControl.View and everything else here)
       ...
      </dxg:GridControl>
</Grid>

因此,为了避免在按钮中使用 GridControl 的 DataContext,您可以绑定到根网格的 DataContext,在这种情况下,它就是对应的 ViewModel。像这样绑定你的按钮:

<dxb:BarButtonItem x:Name="btnDelete" Content="{lex:LocText Translations:Delete, Assembly=Prosa.Common.Modules.UserManagement}" 
IsEnabled="{Binding ElementName=root, Path=DataContext.HasPermissionDelete}"/>

通过设置元素的名称(本例中为“root”),然后在绑定中引用它,您始终可以通过这种方式获得所需的数据上下文。您也可以绑定到没有名称的元素,但绑定表达式要复杂得多(您必须使用 RelativeSource 并选择元素类型)。

希望这能解决您的问题!

于 2013-01-13T23:57:45.877 回答