チェックボックスが設定された ComboBox があります。
ComboxBox の ItemsSource は、チェック ボックスにバインドされるオブジェクトの List にバインドされます。ビューモデル。ビュー モデルは、ブール フィールド名 Selected を持つ単純なオブジェクト (MultiSelectDropDownItem 型) です。
現在、ItemsSource はプログラムで設定されています。これで問題ありません。ビューモデルにバインドされているチェックボックスの属性はすべて適切に設定されており、チェックボックスをオンまたはオフにすると、変更がビューモデルに反映されます。だから私には、双方向バインディングが機能しています。
問題は、これらの MultiSelectDropDownItems のいずれかの Selected プロパティを他の場所で更新したときです。プロパティは PropertyChanged イベントを発生させますが、今回は変更がチェックボックスに反映されません。
私はこれを長い間見てきましたが、私の人生では、変更が更新されない理由を理解できません-チェックボックスの背後にあるオブジェクトがあったとしても、PropertyChangedイベントがチェックボックスを更新しないのはなぜですかプロパティが変更されましたか?
XAML:
<ComboBox x:Name="FieldOptions"
ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Stretch"
Height="30"
KeyDown="FieldOptions_OnKeyDown">
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox Name="checkbox"
Content="{Binding Path=Text}"
Uid="{Binding Path=ID}"
IsChecked="{Binding Path=Selected, Mode=TwoWay}"
FontStyle="Normal"
Foreground="Black"
Checked="CheckBox_OnChecked"
Unchecked="CheckBox_Unchecked"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
コード ビハインド (VB を許してください - 私の選択ではありません!):
Dim items As List(Of MultiSelectDropDownItem) = CreateDropdownItems()
FieldOptions.ItemsSource = items
''' <summary>
''' Represents an item for a Multi-Select drop-down control; a 'View-Model' for combo-items.
''' </summary>
''' <remarks>LN - 08/01/2013</remarks>
Private Class MultiSelectDropDownItem
Inherits clsTemplateControlText
Implements INotifyPropertyChanged
Private _selected As Boolean
Public Property Selected() As Boolean
Get
Return _selected
End Get
Set(value As Boolean)
If (value <> _selected) Then
_selected = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(value))
End If
End Set
End Property
Public Sub New(ByVal tct As clsTemplateControlText, ByVal selected As Boolean)
ID = tct.ID
ControlID = tct.ControlID
Text = tct.Text
ParentID = tct.ParentID
ItemOrder = tct.ItemOrder
_selected = selected
End Sub
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
End Class