如何将修改后的属性绑定到控件Windows通用应用程序(XAML/C#)

本文关键字:应用程序 XAML Windows 控件 修改 绑定 属性 | 更新日期: 2023-09-27 18:21:00

我正在开发一个windows通用应用程序,并试图解决数据绑定问题。

我有一个列表视图,它有一个项模板和数据模板,其中绑定了一个自定义类的属性。

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Textblock Text="{Binding Name}"/>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

这可以很好地显示我绑定到listview的ObservableCollection中的自定义类的所有实例的名称。然而,我想知道是否有某种方法可以在不更改类本身的情况下,在绑定之前修改要绑定的内容。

我正在尝试绑定字符串属性Name的大写,所以如果名称是Test,我想改为绑定TEST。目前,我做这件事的方式是有一个名为NameLabel的单独属性,我像一样填充它

NameLabel = Name.ToUpper();

然而,这看起来非常混乱,我想知道是否有一种更整洁的方法可以在不创建单独房产的情况下做到这一点?

如何将修改后的属性绑定到控件Windows通用应用程序(XAML/C#)

您可以使用转换器。

使用StringToUpper类创建StringToUpper.cs文件,该类继承IValueConverter:

public class StringToUpper: IValueConverter
{
    public object Convert(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        var valueString = value.ToString();
        if (!string.IsNullOrEmpty(valueString))
        {
            return valueString.ToUpper();
        }
        return string.Empty;
    }
    public object ConvertBack(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        // do nothing.
    }
}

添加您创建的转换器的资源:

    ...   
    xmlns:converter="clr-namespace:StringToUpper"
    ...>
    <Window.Resources>
        <converter:StringToUpper x:Key="StringToUpperConverter" />
    </Window.Resources>

添加转换器:

<Textblock Text="{Binding Name, Converter={StaticResource StringToUpperConverter}}"/>

这里有一个关于WPF中转换器的好教程。

您可以创建一个转换器,将属性的值转换为视图所需的形式(在您的情况下,是字符串的简单大写)。

您的转换器类可能如下所示:

 public class StringToUpperStringConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var valueString = value.ToString();
            if (!string.IsNullOrEmpty(valueString))
            {
                return valueString.ToUpper();
            }
            return string.Empty;
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

您的xaml可能在资源部分中定义了这一点:

<converters:StringToUpperStringConverter x:Key="StringToUpperStringConverter" />

然后你的绑定看起来是这样的:

<Textblock Text="{Binding Name, Converter={StaticResource StringToUpperStringConverter}}"/>