您可以使用MarkupExtension来最小化所需的xaml代码量.例如:
public class MyConverter: MarkupExtension, IValueConverter
Run Code Online (Sandbox Code Playgroud)
{private static MyConverter _converter;
public object Convert(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
// convert and return something
}
public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
// convert and return something (if needed)
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (_converter == null)
_converter = new MyConverter();
return _converter;
}
Run Code Online (Sandbox Code Playgroud)
}
你最终得到这样的语法:
{Binding Converter={conv:MyConverter}}
Run Code Online (Sandbox Code Playgroud)
这种方法的另一个优点是可以确保所有转换器都是单例.
这个文章很好地解释这一概念的一个伟大的工作,并提供示例代码.
在转换器中,您可以拥有一个可以在xaml中引用的静态属性或字段.无需添加资源.
public class MyConverter : IValueConverter
{
public static readonly MyConverter Instance = new MyConverter();
... }
Run Code Online (Sandbox Code Playgroud)
在XAML中
<TextBlock Text="{Binding Path=., Converter={x:Static l:MyConverter.Instance}}" />
Run Code Online (Sandbox Code Playgroud)
请注意,这些转换器不应存储任何状态,因为将使用相同的实例.如果您对公共字段感到满意,只需创建一个静态属性.
虽然这是更好的辩论是值得商榷的
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |