2013-01-13 70 views
2

我嘗試綁定上下文菜單項中的IsEnabled屬性。上下文菜單位於Devexpress GridControl.View中。在GridControl.View中綁定IsEnabled屬性

我假設問題出現在DataContext中。該barbutton項正在網格的DataContext中搜索屬性HasPermissionDelete。但這不是視圖模型的數據上下文。我的房產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> 

回答

1

即使你使用卡利微仍然可以回落到標準的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的,在這種情況下將相應的視圖模型。綁定您的按鈕是這樣的:

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

你總是可以得到你這樣想的datacontext,通過(在這個例子中「根」)設置名稱的元素,然後提到它的約束力。你也可以綁定到沒有名字的元素,但綁定表達式要複雜得多(你必須使用RelativeSource並選擇元素類型)。

希望這能解決您的問題!

+0

感謝您的回覆。你的假設是對的。它在一個網格中。不幸的是,如果我更新我的綁定和網格命名像你的,我會在輸出中得到以下錯誤:System.Windows.Data錯誤:4:找不到與參考'ElementName = Root'綁定的源。 BindingExpression:路徑= DataContext.HasPermissionDelete;的DataItem = NULL;目標元素是'BarButtonItem'(HashCode = 56096403);目標屬性是'IsEnabled'(類型'布爾') 你能幫我嗎? – bitsmuggler

+1

我發現你在錯誤中使用了大寫的「Root」元素。綁定表達式看起來沒問題...當綁定失敗時總是確保這些東西:1.拼寫(一切都區分大小寫,intellisense並沒有幫助屬性或元素名稱),2.綁定屬性是公開的獲取/設置訪問器,3.如果它是一個集合,請確保它已被初始化並且它包含某些東西。讓我知道,問候。 – Hannish

+1

感謝您的幫助。不幸的是,它不是Capital R.我認爲這可能是一個mvvm devex/caliburn-問題。現在我正在使用命令(更適合啓用/禁用)。我的新綁定是:Command =「{Binding Path =(dxg:GridPopupMenu.GridMenuInfo).View.DataContext.EditExecutor.EditCmd,RelativeSource = {RelativeSource Self}}」/> – bitsmuggler

相關問題