私は次の状況を持っています:
- オブジェクトのリスト (
List<MyObjects>
) があります。 クラス
MyObjects
には、呼ばれる列挙型と、次States
のような他のいくつかのプロパティが含まれていますObjectName
。public enum States { State1, State2, State3, State4, State5 } public string ObjectName { get; set; } // some more Properties
プライベートフィールドと次のようなプロパティ:
private States _state = States.State1; // State1 is the default state public States State { get { return _state; } set { if (_state != value) { _state = value; OnPropertyChanged("State"); } } }
私の XAML では、リストを
MyObjects
ListView に表示し、列挙型の状態ごとに 5 つのラジオ ボタンを表示したいと考えています。私は次のようにこれを行います:<ListView x:Name="myObjectsListView" ItemsSource="{Binding MyObjectList}"> <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding ObjectName}" Header="Object Name" Width="Auto"/> <!-- some more GridViewColumns --> </GridView> </ListView.View> </ListView> <StackPanel> <RadioButton x:Name="state1RB" Content="{x:Static States.State1}" IsChecked="{Binding ElementName=myObjectsListView, Path=SelectedItem.State, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource enumToBool}, ConverterParameter={x:Static States.State1}, Mode=TwoWay}"/> <RadioButton x:Name="state2RB" Content="{x:Static States.State2}" IsChecked="{Binding ElementName=myObjectsListView, Path=SelectedItem.State, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource enumToBool}, ConverterParameter={x:Static States.State2}, Mode=TwoWay}"/> <RadioButton x:Name="state3RB" Content="{x:Static States.State3}" IsChecked="{Binding ElementName=myObjectsListView, Path=SelectedItem.State, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource enumToBool}, ConverterParameter={x:Static States.State3}, Mode=TwoWay}"/> <RadioButton x:Name="state4RB" Content="{x:Static States.State4}" IsChecked="{Binding ElementName=myObjectsListView, Path=SelectedItem.State, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource enumToBool}, ConverterParameter={x:Static States.State4}, Mode=TwoWay}"/> <RadioButton x:Name="state5RB" Content="{x:Static States.State5}" IsChecked="{Binding ElementName=myObjectsListView, Path=SelectedItem.State, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource enumToBool}, ConverterParameter={x:Static States.State5}, Mode=TwoWay}"/> </StackPanel>
次のような EnumToBoolean コンバーターを使用しています。
[ValueConversion(typeof(System.Enum), typeof(bool))] public class EnumToBooleanConverter : IValueConverter { public object Convert (object value, Type targetType, object parameter, CultureInfo culture) { return value.Equals (parameter); } public object ConvertBack (object value, Type targetType, object parameter, CultureInfo culture) { if ((Boolean)value) return parameter; return null; } }
バインディングは機能し、ラジオ ボタンの表示は機能しますが、問題は、ListView の最初の要素の別のラジオ ボタンをチェックすると、
State
正しく保存されることです。ListView で選択した項目を変更してから、ListView の最初の項目を再度選択すると、State
プロパティのゲッターが呼び出されないため、ラジオ ボタンはチェックされません。
私は解決策を探していましたが、私の特定の問題は、MyObjects
状態を含むリストがあり、選択した項目を変更すると、選択したラジオボタンも変更する必要があることです。
誰かが私の問題を理解し、助けてくれることを願っています。
前もって感謝します、マイク