Wpf “数据绑定复选框”;IsChecked";属性更改不持久
我将TreeView绑定到一个类,该类具有与树视图中的复选框结合使用的“IsChecked”属性。我需要做的是,无论何时选中/取消选中复选框,都会调整相关的“IsChecked”属性 现在,当我取消选中树视图中的复选框时,代码将属性设置为false,但是当代码继续并稍后再次引用该属性时,属性将再次设置为“True”。有人能解释为什么房产的新价值不会改变,解决方案是什么吗 我尝试的(失败的)方法位于底部 以下是XAML本身:Wpf “数据绑定复选框”;IsChecked";属性更改不持久,wpf,vb.net,data-binding,checkbox,Wpf,Vb.net,Data Binding,Checkbox,我将TreeView绑定到一个类,该类具有与树视图中的复选框结合使用的“IsChecked”属性。我需要做的是,无论何时选中/取消选中复选框,都会调整相关的“IsChecked”属性 现在,当我取消选中树视图中的复选框时,代码将属性设置为false,但是当代码继续并稍后再次引用该属性时,属性将再次设置为“True”。有人能解释为什么房产的新价值不会改变,解决方案是什么吗 我尝试的(失败的)方法位于底部 以下是XAML本身: <TreeView.ItemTemplate> <
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=BusGrps}">
<CheckBox Name="ChkBxEnterprise" Content="{Binding Path=Name}" IsEnabled="{Binding Path=Enabled}" IsChecked="{Binding Path=IsChecked, Mode=TwoWay}"/>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Programs}">
<CheckBox Name="ChkBxBusGrp" Content="{Binding Path=Name}" IsEnabled="{Binding Path=Enabled}" IsChecked="{Binding Path=IsChecked, Mode=TwoWay}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<CheckBox Name="ChkBxProg" Content="{Binding Path=Name}" IsEnabled="{Binding Path=Enabled}" IsChecked="{Binding Path=IsChecked, Mode=TwoWay}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
这是一节课:
<Serializable()> Public Class LvlProgram
Implements INotifyPropertyChanged
Public Shared Event selectionChanged(ByVal busgrp As String, ByVal name As String, ByVal selected As System.Nullable(Of Boolean))
Private busGrpLocal As String
Private nameLocal As String
'Private camsLocal As New List(Of LvlCAM)
'Private periodsLocal As New List(Of PeriodScore)
Private camsLocal As New ObservableCollection(Of LvlCAM)
Private periodsLocal As New ObservableCollection(Of PeriodScore)
Private isCheckedLocal As Boolean = True
Private enabledLocal As Nullable(Of Boolean) = False
Public Property Enabled As Nullable(Of Boolean)
Get
Return enabledLocal
End Get
Set(value As Nullable(Of Boolean))
enabledLocal = value
End Set
End Property
Public Property IsChecked As Boolean
Get
Return isCheckedLocal
End Get
Set(value As Boolean)
If isCheckedLocal <> value Then
isCheckedLocal = value
OnPropertyChanged(New PropertyChangedEventArgs("IsChecked"))
RaiseEvent selectionChanged(BusGrp, Name, value)
End If
End Set
End Property
...
公共类LvlProgram
实现INotifyPropertyChanged
公共共享事件选择已更改(ByVal busgrp作为字符串,ByVal name作为字符串,ByVal作为System.Nullable(布尔值))
私有总线作为字符串
私有名称本地作为字符串
“私有camsLocal作为新列表(LvlCAM)
'专用周期本地作为新列表(周期分数)
私有camsLocal作为新的可观察集合(LvlCAM)
私有周期本地作为新的可观察集合(周期分数)
Private isCheckedLocal为布尔值=True
Private enabledLocal As Nullable(属于布尔值)=False
已启用为可空的公共属性(属于布尔值)
得到
返回使能本地
结束
设置(值为空(布尔值))
enabledLocal=值
端集
端属性
公共属性被检查为布尔值
得到
返回isCheckedLocal
结束
设置(值为布尔值)
如果检查局部值,则
isCheckedLocal=值
OnPropertyChanged(新PropertyChangedEventArgs(“IsChecked”))
RaiseEvent selectionChanged(总线组、名称、值)
如果结束
端集
端属性
...
我尝试过以下方法,但均无效:
- 在isCheckedLocal更改后,我将RaiseEvent PropertyChanged(我,新PropertyChangedEventArgs(“IsChecked”))放在上述“集合”中。建议
- 我为复选框“Checked”和“Unchecked”属性创建了处理程序。问题是它们会在我的所有其他代码之后运行。建议
- 我现在尝试在isCheckedLocal=value之后立即使用OnPropertyChanged(newPropertyChangedEventArgs(“IsChecked”))失败
<NonSerialized()> Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Sub OnPropertyChanged(ByVal e As PropertyChangedEventArgs) If Not PropertyChangedEvent Is Nothing Then RaiseEvent PropertyChanged(Me, e) End If End Sub
公共事件属性更改为PropertyChangedEventHandler实现INotifyPropertyChanged.PropertyChanged Public Sub-OnPropertyChanged(通过值e作为PropertyChangedEventArgs) 如果不是,那么PropertyChangedEvent什么都不是 RaiseEvent属性已更改(Me,e) 如果结束 端接头
public DateTime MigrationDate
{
get { return _migrationDate; }
set
{
_migrationDate = value;
RaisePropertyChanged("MigrationDate");
}
}
注意字符串与属性名完全相同。然后,这将在后台连接。尝试使用
Public Shared Event selectionChanged(ByVal busgrp As String, ByVal name As String, ByRef selected As System.Nullable(Of Boolean))
而不是
Public Shared Event selectionChanged(ByVal busgrp As String, ByVal name As String, ByVal selected As System.Nullable(Of Boolean)
您的类需要实现INotifyPropertyChanged,并且您必须在IsChecked属性上引发property changed事件,您可以在不希望通知ui的属性的setter中执行此操作。我的类已经在执行此操作,但我未能显示此操作。