【发布时间】:2018-06-19 20:16:48
【问题描述】:
比我聪明的人请帮助完成一个简单的编码任务:将复选框的 .ischecked 绑定到对象的布尔属性?我创建了一个简单的项目来模仿我在一个更大的项目中尝试做的事情,以进行简单的调试和演示。我有一个复选框,单击它会设置我的类对象的布尔属性。 UI 上的另一个复选框应根据该布尔属性的 T/F 值更新其选中状态。这里有什么问题以及如何修复并使其正常工作?我“相信”问题可能是因为我设置的对象的属性与 checkbox.ischecked 属性绑定的对象不同(???)。这是问题所在,如果是,我该如何解决? VB 或 XAML 端需要实现哪些代码?
MainWindow.xaml.vb
Public Bools As New Boolean_Properties
Private Sub ckbx1_Click(sender As Object, e As RoutedEventArgs) Handles ckbx1.Click
If ckbx1.IsChecked Then
Bools.Sta1Mode = True
Else Bools.Sta1Mode = False
End If
End Sub
类 Boolean_Properties
Implements INotifyPropertyChanged
Private ModeSta1 As Boolean
Public Event ThePropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Property Sta1Mode As Boolean
Get
Return ModeSta1
End Get
Set(ByVal value As Boolean)
ModeSta1 = value
RaiseEvent ThePropertyChanged(Me, New PropertyChangedEventArgs("Sta1Mode"))
End Set
End Property
XAML
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BindBooleanProperty"
mc:Ignorable="d"
xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"
Title="MainWindow" Height="217.032" Width="226.067">
<Window.DataContext>
<local:Boolean_Properties/>
</Window.DataContext>
<Grid>
<CheckBox Content="Output" HorizontalAlignment="Left" Margin="99.866,134.399,0,0" VerticalAlignment="Top" IsChecked="{Binding Sta1Mode, Mode=OneWay}">
<CheckBox.DataContext>
<local:Boolean_Properties/>
</CheckBox.DataContext>
</CheckBox>
<CheckBox x:Name="ckbx1" Content=" Input" HorizontalAlignment="Left" Margin="99.866,78.932,0,0" VerticalAlignment="Top"/>
</Grid>
【问题讨论】:
-
Public Event ThePropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChange看起来很可疑。该事件应该被称为PropertyChanged。你试过没有别名吗? -
??我不就是这样吗? "公共事件 ThePropertyChanged 作为 PropertyChangedEventHandler 实现 INotifyPropertyChanged.PropertyChanged"