我有一个ItemsControl,它绑定并设置为我的viewmodel中的observablecollection:
<ItemsControl ItemsSource="{Binding AwaySelection}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<RadioButton Content="{Binding AwayText}" ></RadioButton>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
现在,如何找出点击哪一个?我想将每个Radiobutton的IsChecked值绑定到viewmodel中的单个变量,该变量返回集合的索引。这将使我很容易直接引用所选项目。有什么想法吗?
答案 0 :(得分:2)
这就是我解决这个问题的方法。我为此写了一个EnumToBool转换器,比如
public class EnumToBoolConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value,
Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (parameter.Equals(value))
return true;
else
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return parameter;
}
#endregion
}
我有以下枚举
public enum CompanyTypes
{
Type1Comp,
Type2Comp,
Type3Comp
}
现在,在我的Xaml中,我将类型作为转换器参数传递。
<Window x:Class="WpfTestRadioButtons.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfTestRadioButtons"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:EnumToBoolConverter x:Key="EBConverter"/>
</Window.Resources>
<Grid>
<StackPanel>
<RadioButton IsChecked="{Binding Path=Type,
Converter={StaticResource EBConverter},
ConverterParameter={x:Static local:CompanyTypes.Type1Comp}}" Content="Type1"/>
<RadioButton IsChecked="{Binding Path=Type,
Converter={StaticResource EBConverter},
ConverterParameter={x:Static local:CompanyTypes.Type2Comp}}" Content="Type2"/>
</StackPanel>
</Grid>
</Window>
现在,在您的视图模型中,您应该拥有一个属性(在本例中为Type),该属性是Enum类型。
喜欢,
public CompanyTypes Type
{
get
{
return _type;
}
set
{
_type = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Type"));
}
}
在此示例中,您可能已经注意到Radiobuttons是静态的。在您的情况下,当您在Item控件中列出单选按钮时,您需要将RadioButton的ConverterParameter绑定到正确的类型。
答案 1 :(得分:0)
最后,我将单选按钮放入列表视图中,并将listview的isselected属性绑定到radiobutton属性。
答案 2 :(得分:0)
当使用带有radiobutton控件的MVVM时,在onToggle()方法上会出现问题,但您可以为此创建一个单选按钮。
public class DataBounRadioButton: RadioButton
{
protected override void OnChecked(System.Windows.RoutedEventArgs e) {
}
protected override void OnToggle()
{
this.IsChecked = true;
}
}
然后添加对control和Binding属性的引用,在我的例子中是IsActive。
<controls:DataBounRadioButton
IsChecked="{Binding IsActive}"/>