我使用以下代码预先选择了列表框中的某些行:
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding f_selected, Mode=OneWay}" />
</Style>
</ListBox.ItemContainerStyle>
代码中f_selected的值只能为true或false,但在DB上为y / n。 我使用了一个技巧通过使用对象将y / n转换为true / false,但是更高的头脑要求我仅在对象中使用y / n。 有什么方法可以使用字符串而不是bool或在XAML或viewmodel中进行转换?
感谢您的帮助,并一如既往地感谢英语不好的人。
答案 0 :(得分:0)
注意:如果要开发WPF应用程序,使用DataTrigger的mm8答案非常好。
在WPF和UWP中,您可以创建IValueConverter接口的自定义实现,以几乎相同的代码来实现此目的。基本上,它将根据您定义的规则将字符串输入转换为布尔值。
WPF:
public class StringToBooleanConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.ToString().Equals("y");
}
// This is not really needed because you're using one way binding but it's here for completion
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if(value is bool)
{
return value ? "y" : "n";
}
}
}
UWP:
除了Convert和ConvertBack方法中的最后一个参数外,以上代码完全相同:
public object Convert(object value, Type targetType, object parameter, string language) { }
public object ConvertBack(object value, Type targetType, object parameter, string language) { }
对于WPF和UWP,以下内容大致相同。您可以使用XAML中的转换器将字符串从字符串转换为bool:
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding f_selected, Mode=OneWay, Converter={StaticResource StringToBooleanConverter}}" />
</Style>
</ListBox.ItemContainerStyle>
此外,请记住在开始时介绍转换器:
<Window.Resources>
<local:YesNoToBooleanConverter x:Key="StringToBooleanConverter" />
</Window.Resources>
答案 1 :(得分:0)
在WPF中,您可以使用DataTrigger
:
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding f_selected}" Value="y">
<Setter Property="IsSelected" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
在UWP中,您可以使用DataTriggerBehavior完成相同的操作。