【发布时间】:2018-09-24 17:57:43
【问题描述】:
我正在使用 IValueConverter 设置一个复选框。 但我有三个复选框,我像 RadioButton 一样使用。当一个被选中时,另一个需要被取消选中。
所以我做了类似的事情>
<MenuItem StaysOpenOnClick="True"
Header="Reiniciar áudio"
IsCheckable="True"
Name="RestartAudioCheck"
IsChecked="{Binding PlayType,
Mode=TwoWay,
Converter={StaticResource PlayTypeCheckedConverter},
ConverterParameter=restart}">
</MenuItem>
<MenuItem StaysOpenOnClick="True"
Header="Parar áudio"
IsCheckable="True"
Name="StopAudioCheck"
IsChecked="{Binding PlayType,
Mode=TwoWay,
Converter={StaticResource PlayTypeCheckedConverter},
ConverterParameter=stop}">
</MenuItem>
<MenuItem StaysOpenOnClick="True"
Header="Pausar áudio"
IsCheckable="True"
Name="PauseAudioCheck"
IsChecked="{Binding PlayType,
Mode=TwoWay,
Converter={StaticResource PlayTypeCheckedConverter},
ConverterParameter=pause}">
</MenuItem>
和转换器:
class PlayTypeCheckedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is PlayType type))
return false;
if (!(parameter is string check))
return false;
if (check.CompareTo("restart") == 0 && type == PlayType.Restart)
return true;
if (check.CompareTo("stop") == 0 && type == PlayType.Stop)
return true;
if (check.CompareTo("pause") == 0 && type == PlayType.Pause)
return true;
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is bool isChecked))
return true;
if (!(parameter is string type))
return PlayType.Restart;
if (type.CompareTo("restart") == 0 && isChecked)
return PlayType.Restart;
if (type.CompareTo("stop") == 0 && isChecked)
return PlayType.Stop;
if (type.CompareTo("pause") == 0 && isChecked)
return PlayType.Pause;
return PlayType.Restart;
}
}
我的问题是:以绝对文本之类的 ConverterParameter 作为示例来了解转换器的某些内容是错误的吗? 就像我做的一样,效果很好。
【问题讨论】:
-
你为什么使用 IvalueCONverter,只需将 3 个复选框与 3 个不同的值绑定,然后在代码后面或视图模型中使用。你可以使用鼠标按下事件。或者我误解了什么......?
-
每个复选框我没有 3 个不同的值。因此,当 Pause Type = Restart 时,其他复选框将自动取消选中,我将 ValueConverter 设置为 3 复选框
-
你为什么不直接使用 RadioButton 呢?