【发布时间】:2016-03-18 11:57:50
【问题描述】:
我有一个 ListView,它在下面显示 CheckBoxes XAML 的列表。 Checkbox 是一个自定义类,代码如下。 Checkbox 的初始状态设置正确。但是,当单击复选框时,它应该被禁用(IsEnabled = False),但这并没有发生,尽管在自定义类中实现了如下所示的 INotify 代码(尽管我怀疑错误在这里某处,或者XAML 标记错误)。我什至尝试强制对 Click 事件进行绑定更新,但没有帮助,代码如下。有人可以帮忙吗?
编辑:我刚刚意识到解释可能有点混乱。以下是应该发生的情况:1) 自定义 Checkbox 显示初始值(这部分正在工作),2) 用户单击 Checkbox,3) Click 事件应该触发并更新 IsChecked 属性(看起来这发生在调试器中查看属性时),4)IsEnabled 属性切换为 False 并禁用控件(此操作失败)。
XAML:
<DataTemplate>
<CheckBox Content="test"
ToolTip="test"
IsThreeState="False"
x:Name="myCheckBox"
Click="MyClickEvent_OnClicked"
IsChecked="{Binding outIsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
自定义复选框:
Public Class MyCustomCheckBox
Inherits CheckBox
Implements INotifyPropertyChanged
Public Property outIsChecked As Boolean
Get
Return Me.IsChecked
End Get
Set(valueChecked As Boolean)
If valueChecked <> Me.IsChecked Then
Me.IsChecked = valueChecked
'NotifyPropertyChanged("IsChecked")
'OnPropertyChanged(New PropertyChangedEventArgs("IsChecked"))
RaisePropertyChanged("IsChecked")
End If
End Set
End Property
Public Sub New()
End Sub
Public Sub New(ByVal inIsChecked As Boolean)
outIsChecked = inIsChecked
End Sub
Public Event PropertyChanged As PropertyChangedEventHandler _
Implements INotifyPropertyChanged.PropertyChanged
Protected Sub RaisePropertyChanged(ByVal propertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
End Class
点击事件:
Public Sub MyClickEvent_OnClicked(sender As Object, e As RoutedEventArgs)
Dim cbx1 As ChordPattern = CType(checkboxList(keyIndexes(0)), MyCustomCheckBox)
cbx1.outIsChecked = False
cbx1.IsEnabled = False
'cbx1.GetBindingExpression(MyCustomCheckBox.IsEnabledProperty).UpdateTarget()
End Sub
【问题讨论】:
-
我认为行“Dim cbx1 As ChordPattern = CType(checkboxList(keyIndexes(0)), MyCustomCheckBox)”的问题。尝试将其替换为“Dim cbx1 As MyCustomCheckBox = CType(sender, MyCustomCheckBox)”
标签: wpf xaml checkbox binding inotifypropertychanged