gpt4 book ai didi

具有显式转换的 WPF 绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 13:54:05 25 4
gpt4 key购买 nike

我的问题可能是其他转换问题的重复,但我觉得我的问题不同。

这里是... [简化示例]。

public class DataWrapper<T>
{
public T DataValue{ get; set; }

public DataWrapper(T value)
{
DataValue = value;
}

public static explicit operator DataWrapper<T> (T value)
{
return new DataWrapper<T>(value);
}

public static implicit operator T(DataWrapper<T> data)
{
return data.DataValue;
}
}

现在,在我的 ViewModel 中:
public class ViewModel
{
public DataWrapper<string> FirstName { get;set; }
public DataWrapper<string> LastName { get; set; }
}

在 XAML 中:
<TextBlock Text="{Binding FirstName}" />
<TextBlock Text="{Binding LastName}" />

我的问题是,这行得通吗? WPF 绑定(bind)是否会调用 ImplicitExplicit我的 DataWrapper<T> 中的转换器类而不需要实现 IValueConverter对于每个 TextBlock .

最佳答案

我不能说它是否有效,因为我还没有测试过。但是,如果它不起作用,您可以尝试使用 TypeConverter为您的DataWrapper类型。

例如:

[TypeConverter(typeof(DataWrapperConverter))]
public class DataWrapper
{
...
}

public class DataWrapperConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType)
{
return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
}

public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value is string)
{
return (DataWrapper<string>)value;
}

return base.ConvertFrom(context, culture, value);
}
}

您可以使用 Type 类上的通用辅助方法来更动态地处理您的类型转换。

关于具有显式转换的 WPF 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com