我希望绑定到Converter属性,而不是使用{StaticResource ResourceKey}作为其值。
实际上,我有一个ListView,自定义UserControl作为ItemTemplate。项使用ItemConverter : IValueConverter进行绑定。当我在UserControl.Resources中声明我的转换器时,会为每个列表项创建一个ItemConverter实例,这是绝对不必要的。我希望创建一个转换器实例并将其传递给每个项,这样我就可以在我的usercontrol中执行以下操作:
<!-- not working -->
<TextBlock
Text="{Binding Converter={Binding something}}"
Foreground="Black"
FontSize="40"
/>在Windows 8.1和Windows 8.1的通用存储应用程序中,是否有可能做到这一点?有什么好办法避免这样做吗?
我发现一些过时的项目与通用应用程序不兼容:
对于通用应用来说,有这样的东西吗?
发布于 2015-07-16 09:37:16
目前,Windows8.1和Windows 8.1的通用存储项目都无法使用该功能。
发布于 2015-02-26 13:53:05
我想创建一个转换器实例
我在博客(Xaml:在Xaml中调用绑定转换器而不定义StaticResource,这要归功于C#中的标记派生基类)上写了一篇关于这种操作的方法的文章。
让我转述一下我自己的文章。
一旦使用基类的单例定义了转换器,就不必在页面的资源中创建转换器。
public class BooleanToVisibilityReverseConverter :
CoverterBase<BooleanToVisibilityReverseConverter>,
System.Windows.Data.IValueConverter下面是在Xaml中访问的一个例子(页面的资源中没有静态创建),只是对转换器的一个简单的名称空间访问:
<DataGrid Grid.Row="1"
Visibility="{Binding IsEditing,
Converter={ converters:BooleanToVisibilityReverseConverter }
}">随后,访问将直接在命名空间中进行,并且只为每个页面创建一个访问。
下面是基类:
/// <summary>
/// This creates a Xaml markup which can allow converters (which inheirit form this class) to be called directly
/// without specify a static resource in the xaml markup.
/// </summary>
public class CoverterBase<T> : MarkupExtension where T : class, new()
{
private static T _converter = null;
public CoverterBase() { }
/// <summary>Create and return the static implementation of the derived converter for usage in Xaml.</summary>
/// <returns>The static derived converter</returns>
public override object ProvideValue(IServiceProvider serviceProvider)
{
return _converter ?? (_converter = (T) Activator.CreateInstance(typeof (T), null));
}
}有关更好的概述,请参阅我的博客文章。
https://stackoverflow.com/questions/28742479
复制相似问题