GridControl.View中的绑定IsEnabled属性
本文关键字:IsEnabled 属性 绑定 View GridControl | 更新日期: 2023-09-27 17:53:16
我尝试在上下文菜单项中绑定IsEnabled
属性。上下文菜单放在Devexpress GridControl.View
中。
我假设问题在DataContext中。barbutton项正在网格的DataContext中搜索属性HasPermissionDelete
。但这不是视图模型的数据上下文。我的属性HasPermissionDelete
在ViewModel上。
我用的是caliburn.micro.
你能帮我修复这个绑定吗?
My xaml code:
<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>
即使您使用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}"/>
通过设置元素的Name(在本例中为"root"),然后在绑定中引用它,您总是可以以这种方式获得所需的数据上下文。您也可以绑定到没有名称的元素,但是绑定表达式要复杂得多(您必须使用RelativeSource并选择元素类型)。
希望这能解决你的问题!