2

IsEnabledコンテキストmenuitemでプロパティをバインドしようとしています。コンテキストメニューはDevexpressに配置されますGridControl.View

問題はDataContextにあると思います。バーボタンアイテムはHasPermissionDelete、グリッドのDataContextでプロパティを検索しています。しかし、これはビューモデルのデータコンテキストではありません。私のプロパティHasPermissionDeleteはViewModelにあります。

私はcaliburn.microを使用しています。

このバインディングを修正するのを手伝ってもらえますか?

私のxamlコード:

<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バインディングにフォールバックできます。DevExpressDataGridがページまたは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 に答える