2016-12-07 105 views
0

我正嘗試更新以前的內置表單以使用樣式來幫助清理代碼並更好地切換到MVVM。我們有邏輯需要將列標記爲只讀,直到選中複選框。WPF禁用帶樣式的Datagrid列

我已經嘗試綁定到複選框本身,但收到綁定錯誤,說它找不到複選框。

IsReadOnly="{Binding ElementName=ckbPerUnitType, Path=IsChecked, Converter={StaticResource BoolInv}, ConverterParameter=True}" 

我已經嘗試綁定到父用戶控件數據上下文,該複選框被綁定到。我收到一個錯誤,說明無法找到綁定參考的來源。

IsReadOnly="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=UserControl}, Path=DataContext.RentAdj.blnIsDifferentForType, Converter={StaticResource BoolInv}, ConverterParameter=True}" 

我不知道我缺少什麼。

這裏是因爲這是轉換器,兩個

<ValueConversion(GetType(Boolean), GetType(Boolean))> _ 
Public Class BooleanInverseConverter 
    Implements IValueConverter 
    ''' <summary> 
    ''' Converter to Compare the Inverse of a Boolean 
    ''' </summary> 
    ''' <param name="value">Boolean you wish to compare</param> 
    ''' <param name="targetType"></param> 
    ''' <param name="parameter">Boolean to determine if the value needs to be inverted</param> 
    ''' <param name="culture"></param> 
    ''' <returns></returns> 
    ''' <remarks></remarks> 
    Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert 
     Dim v As Boolean = DirectCast(value, Boolean) 
     If CBool(parameter) = True Then v = Not v 
     Return v 
    End Function 
    Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack 
     Throw New Exception("Not Implemented") 
    End Function 
End Class 

回答

0

用在研究不同的問題轉換器的代碼,我碰到this答案,它actaully解決了我的問題。這裏是工作解決方案

<CheckBox x:Name="ckbPerUnitType" /> 
.... 
IsReadOnly="{Binding Source={x:Reference ckbPerUnitType}, Path=DataContext.RentAdj.blnIsDifferentForType, Converter={StaticResource BoolInv}, ConverterParameter=True}"