Tri*_*ran 4 data-binding wpf converter type-conversion
我的问题可能是其他转换问题的重复,但我觉得我的不同.
这里... [简化示例].
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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的ViewModel中:
public class ViewModel
{
public DataWrapper<string> FirstName { get;set; }
public DataWrapper<string> LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在XAML中:
<TextBlock Text="{Binding FirstName}" />
<TextBlock Text="{Binding LastName}" />
Run Code Online (Sandbox Code Playgroud)
我的问题是,这会有效吗?将WPF绑定调用Implicit和Explicit转换器在我的DataWrapper<T>类,而不是需要实现一个IValueConverter每个TextBlock.
我不能说它是否会起作用,因为我还没有测试过.但是,如果它不起作用,您可以尝试使用a 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);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用Type类上的通用帮助器方法更动态地处理类型转换.
| 归档时间: |
|
| 查看次数: |
2175 次 |
| 最近记录: |