我有以下情况
1- xaml中的组合框
<ComboBox
x:Name="PublishableCbo" Width="150" IsEnabled="True" HorizontalAlignment="Left" Height="20"
SelectedValue="{Binding Path=Published, Mode=TwoWay}"
Grid.Column="6" Grid.Row="0">
<ComboBox.Items>
<ComboBoxItem Content="All" IsSelected="True" />
<ComboBoxItem Content="Yes" />
<ComboBoxItem Content="No" />
</ComboBox.Items>
2-在模型类中,我定义了一个属性并绑定到组合框中的selectedvalue
public bool Published
{
get
{
return _published;
}
set
{
_published = value;
OnPropertyChanged("Published");
}
}
我知道我必须实现转换器,但不知道具体如何。我想要的是当模型中的选择是/否,获得真/假值,当&#34;全部&#34;被选中,以获得空值。
答案 0 :(得分:1)
为了能够将null
分配给Published
属性,您必须将其类型更改为Nullable< bool >(您可以在C#中编写bool?
)。
public bool? Published
{
...
}
可以实现转换器,使其从string
转换为bool
,反之亦然,如下所示。请注意,转换器使用的是bool
,而不是bool?
,因为值会以object
的形式传递到转换器或从转换器传递,因此无论如何都要装箱。
public class YesNoAllConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
object result = "All";
if (value is bool)
{
result = (bool)value ? "Yes" : "No";
}
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
object result = null;
switch ((string)value)
{
case "Yes":
result = true;
break;
case "No":
result = false;
break;
}
return result;
}
}
要启用此转换器,您必须将ComboBox项类型更改为string
,并绑定到SelectedItem属性,而不是SelectedValue。
<ComboBox SelectedItem="{Binding Path=Published, Mode=TwoWay,
Converter={StaticResource YesNoAllConverter}}">
<sys:String>All</sys:String>
<sys:String>Yes</sys:String>
<sys:String>No</sys:String>
</ComboBox>
其中sys
是以下xml名称空间声明:
xmlns:sys="clr-namespace:System;assembly=mscorlib"