我有一个ToggleButton是一个标准的WPF类,我想将IsChecked绑定到我的模型的属性状态,Status可以有两个以上的值:Status1,Status2,Status3,Status4。 Status
的类型为SomeThirdPartyClassStatus
,我无法访问其源代码。
<ToggleButton IsChecked="{Binding Status???}" />
那么如何将状态绑定到IsChecked
呢?我更喜欢xaml解决方案。
我希望绑定IsChecked
属性,以便当Status等于Status1时它为True,而在其他情况下它为false。我不想在* .cs文件中编写任何代码,而只编写xaml代码。
答案 0 :(得分:1)
创建一个派生自IValueConverter的类,您可以将其应用于绑定。
https://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter(v=vs.110).aspx
答案 1 :(得分:1)
<强>更新强>
只需使用此样式切换按钮
即可<Style TargetType="{x:Type ToggleButton}">
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="Status1" >
<Setter Property="IsChecked" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
因此,如果Status有值,将检查Status1切换按钮。
答案 2 :(得分:1)
作为替代方案,您可以将纯XAML解决方案与DataTrigger
一起使用。假设你有像
public enum SomeThirdPartyClassStatus {
Status1,
Status2,
Status3,
Status4
}
你可以做到
<ToggleButton>
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="IsChecked" Value="False"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="{x:Static local:SomeThirdPartyClassStatus.Status1}">
<Setter Property="IsChecked" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
其中local
是SomeThirdPartyClassStatus
的名称空间,如
xmlns:local="clr-namespace:WpfApplication1"
警告说它只能单向
修改强>
对于双向绑定,您需要自定义IValueConverter
public class EnumConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (SomeThirdPartyClassStatus)value == SomeThirdPartyClassStatus.Status1;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool?)value == true ? SomeThirdPartyClassStatus.Status1 : SomeThirdPartyClassStatus.Status2;
}
}
然后绑定看起来像
<ToggleButton IsChecked="{Binding Path=Status, Converter={StaticResource EnumConverter}}"/>