Windows Phone 8.1 上的 RadioButtons 绑定
RadioButtons binding on Windows Phone 8.1
我在绑定 RadioButton
属性 IsChecked
时遇到了一些问题。我在网格上有两个 RadioButton
,Visibility
绑定到我的视图模型上的 属性。我想要实现的是始终将第一个 RadioButton
设置为 Checked 状态,当网格变得可见时。
这是一些代码:
<Grid Visibility="{Binding State, Converter={StaticResource VisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<RadioButton Grid.Row="0"
Margin="20,0"
IsChecked="{Binding State, Converter={StaticResource StateToBooleanConverter}}"
Content="content 1" />
<RadioButton Grid.Row="1"
Margin="20,0"
Content="content 2" />
</Grid>
按照我的逻辑,当 属性 State
进入特定状态时,当网格变得可见时,它应该首先设置 RadioButton
为已检查。在我达到第二个 RadioButton
之前,它工作正常。然后我的绑定不起作用,当 State
发生变化时,我的 StateToBooleanConverter
什么也没有发生。
我阅读了很多关于单选按钮绑定问题的信息,但在我的案例中没有任何效果。
是否可以在没有 new 属性 的情况下检查 radioButton?如有任何建议我可以解决此问题,我将不胜感激。
编辑:
IsChecked
的视图模型和转换器中有一些代码:
public class MainViewModel : ViewModel
{
public MainViewModel
{
this.ChangeState = new RelayCommand(this.ChangeStateExecute);
}
public PageState State
{
get
{
return this.state;
}
set
{
if (this.state != value)
{
this.state = value;
base.RaisePropertyChanged();
}
}
}
public RelayCommand ChangeState { get; private set; }
private void ChangeStateExecute()
{
this.State = PageState.RadioButtonsVisible;
}
}
public class StateToBooleanConverter : Converter
{
protected override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var state = (PageState)value;
var result = state == PageState.RadioButtonsVisible;
return result;
}
}
假设 PageState 是一个枚举,this answer is what you're looking for.
您想要组合在一起的所有单选按钮都绑定到相同的 属性 ViewModel,并且都使用相同的 ValueConverter。触发单选按钮选中/取消选中的值被传递到 ValueConverter 的 parameter
属性.
对于您的具体问题,EnumBooleanConverter
可以直接复制粘贴到您的代码中(一定要仔细阅读并确保您理解它)。
然后XAML就变成了
<Grid Visibility="{Binding State, Converter={StaticResource VisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<RadioButton Grid.Row="0"
Margin="20,0"
IsChecked="{Binding State, Converter={StaticResource EnumBooleanConverter}, ConverterParameter=RadioButtonVisible}"
Content="content 1" />
<RadioButton Grid.Row="1"
Margin="20,0"
IsChecked="{Binding State, Converter={StaticResource EnumBooleanConverter}, ConverterParameter=*Insert enum value here*}"
Content="content 2" />
</Grid>
我在绑定 RadioButton
属性 IsChecked
时遇到了一些问题。我在网格上有两个 RadioButton
,Visibility
绑定到我的视图模型上的 属性。我想要实现的是始终将第一个 RadioButton
设置为 Checked 状态,当网格变得可见时。
这是一些代码:
<Grid Visibility="{Binding State, Converter={StaticResource VisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<RadioButton Grid.Row="0"
Margin="20,0"
IsChecked="{Binding State, Converter={StaticResource StateToBooleanConverter}}"
Content="content 1" />
<RadioButton Grid.Row="1"
Margin="20,0"
Content="content 2" />
</Grid>
按照我的逻辑,当 属性 State
进入特定状态时,当网格变得可见时,它应该首先设置 RadioButton
为已检查。在我达到第二个 RadioButton
之前,它工作正常。然后我的绑定不起作用,当 State
发生变化时,我的 StateToBooleanConverter
什么也没有发生。
我阅读了很多关于单选按钮绑定问题的信息,但在我的案例中没有任何效果。
是否可以在没有 new 属性 的情况下检查 radioButton?如有任何建议我可以解决此问题,我将不胜感激。
编辑:
IsChecked
的视图模型和转换器中有一些代码:
public class MainViewModel : ViewModel
{
public MainViewModel
{
this.ChangeState = new RelayCommand(this.ChangeStateExecute);
}
public PageState State
{
get
{
return this.state;
}
set
{
if (this.state != value)
{
this.state = value;
base.RaisePropertyChanged();
}
}
}
public RelayCommand ChangeState { get; private set; }
private void ChangeStateExecute()
{
this.State = PageState.RadioButtonsVisible;
}
}
public class StateToBooleanConverter : Converter
{
protected override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var state = (PageState)value;
var result = state == PageState.RadioButtonsVisible;
return result;
}
}
假设 PageState 是一个枚举,this answer is what you're looking for.
您想要组合在一起的所有单选按钮都绑定到相同的 属性 ViewModel,并且都使用相同的 ValueConverter。触发单选按钮选中/取消选中的值被传递到 ValueConverter 的 parameter
属性.
对于您的具体问题,EnumBooleanConverter
可以直接复制粘贴到您的代码中(一定要仔细阅读并确保您理解它)。
然后XAML就变成了
<Grid Visibility="{Binding State, Converter={StaticResource VisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<RadioButton Grid.Row="0"
Margin="20,0"
IsChecked="{Binding State, Converter={StaticResource EnumBooleanConverter}, ConverterParameter=RadioButtonVisible}"
Content="content 1" />
<RadioButton Grid.Row="1"
Margin="20,0"
IsChecked="{Binding State, Converter={StaticResource EnumBooleanConverter}, ConverterParameter=*Insert enum value here*}"
Content="content 2" />
</Grid>