在XAML中将y / n转换为true / false

时间:2019-04-05 13:58:19

标签: c# xaml

我使用以下代码预先选择了列表框中的某些行:

<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中进行转换?

感谢您的帮助,并一如既往地感谢英语不好的人。

2 个答案:

答案 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完成相同的操作。