我有以下情況的對象的具體名單枚舉:綁定單選按鈕,在
- 我有對象(
List<MyObjects>
)的列表。 的Class
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 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
其中包含一個狀態和更改選定的項目,選定的單選按鈕也應該改變的列表。
我希望有人瞭解我的問題,並可以提供幫助。
由於提前, 邁克
您可能對[此問題]感興趣(http://stackoverflow.com/questions/9145606/),因爲您的代碼相當多。 –
感謝您的提示。我用[this](http://stackoverflow.com/a/9145914/1384848)答案來解決我的問題。它工作得很好。 –