2012-10-15 50 views
1

當你將bool值綁定到xamdatagrid時,該列將自動使用xamcheckeditor來顯示數據。我想使用外部按鈕來控制複選框列的allowedit,當我更改allowedit屬性時,列中的複選框將應用禁用/啓用樣式(變爲灰色) 在我的資源字典中,我爲xamcheckeditor:如何實現xamcheckeditor禁用樣式

<ControlTemplate.Triggers> 
    <Trigger Property="IsReadOnly" Value="True"> 
     <Setter TargetName="PART_FocusSite" Property ="IsEnabled" Value="False" /> 
    </Trigger> 
</ControlTemplate.Triggers> 

所以當字段是不可編輯,該複選框將顯示爲禁用。

我也有一個按鈕來控制列的allowedit,當按鈕獲得點擊,它會調用:

grid.FieldsLayouts[0].Fields["Enabled"].Settings.AllowEdit = true/false 

但啓用/禁用的動作不會自動應用,我必須點擊過濾器刷新網格,使它們得到應用...

請告知我應該怎麼做才能實現一旦點擊按鈕來設置提交allowedit,複選框將自動啓用。

謝謝!

Enzhou

回答

3

如果你想要做的是禁用/啓用XamCheckEditor時,它所屬的領域已經AllowEdit設置爲false/true,那麼所有你需要做的就是創建一個風格與綁定直接連接到AllowEdit。

<local:NullableBooleanConverter x:Key="converter"/> 

<Style TargetType="{x:Type igEditors:XamCheckEditor}" > 
    <Setter Property="IsEnabled" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type igDP:CellValuePresenter}}, 
     Path=Field.Settings.AllowEdit, Converter={StaticResource converter}}"/> 
</Style> 

由於XamCheckEditor是你的字段的每個細胞內,這意味着它是一個CellValuePresenter內。您可以使用RelativeSource綁定來獲取它,然後訪問它的屬性。它的一個屬性是它所屬的領域。所以知道這一點,你可以直接綁定到AllowEdit。

現在AllowEdit是一個可爲null的布爾值(布爾值?),默認爲null,所以您將需要使用轉換器來確保數據正確傳遞到XamCheckEditor。

public class NullableBooleanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     // If value is null then we really mean true. 
     if (value == null) 
      return true; 

     // value is not null so it's either true or false. 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

您現在需要做的就是設置AllowEdit屬性,就像您最初所做的那樣,它會自動更新XamCheckEditor。