.NET Framework v4.0 では、WPF の状態変更をオーバーライドできますRadioButton
か?
以下の XAML では、Listbox を使用して動的な数のアイテムを表示しています。そのうちの 1 つのアイテムが「選択されたアイテム」と見なされます。
<ListBox Height="Auto"
Name="listBoxItems"
ItemsSource="{Binding Mode=OneWay, Path=Items}"
SelectedItem="{Binding Path=UserSelectedItem}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<RadioButton GroupName="SameGroup" Checked="OnItemSelected" IsChecked="{Binding Mode=TwoWay, Path=IsSelected}" CommandParameter="{Binding}"/>
<TextBlock Text="{Binding Mode=OneTime, Converter={StaticResource itemDescriptionConverter}}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
RadioButton をクリックすると、OnItemSelected メソッドはいくつかの検証を行い、新しい「選択された項目」が保存されることをユーザーに通知するダイアログ ボックスを提供します。
エラー状態が発生した場合、またはユーザーが保存をキャンセルした場合、RadioButton の状態の変更をリセット/オーバーライドしたいと考えていました。つまり、IsSelected プロパティの値を手動で変更します。
これをデバッグすると、次の一連のイベントが表示されます。
- ラジオ ボタンがチェックされ、
IsSelected
プロパティの変更値が発生NotifyPropertyEvent
し、 - プロパティの新しい値
IsSelected
が読み取られます。 OnSelected
メソッドが呼び出され、ダイアログ ボックスが表示されます。- ユーザーがアクションをキャンセルすると、
IsSelected
バインドされた各オブジェクトを手動で呼び出し、値をリセットします。これにより、複数のNotifyPropertyEvents
. - リセット値は決して再読み込みされません。