如何绑定Binding.Converter属性?

How to bind the Binding.Converter property?

我想绑定到 Converter 属性 而不是使用 {StaticResource ResourceKey} 作为它的值。

实际上,我有一个带有自定义 UserControl 作为 ItemTemplate 的 ListView。项目使用 ItemConverter : IValueConverter 进行绑定。当我在 UserControl.Resources 中声明我的转换器时,会为每个列表项创建一个 ItemConverter 的实例,这是绝对没有必要的。我想创建一个转换器实例并将其传递给每个项目,这样我就可以在我的用户控件中执行以下操作:

<!-- not working -->
<TextBlock 
    Text="{Binding Converter={Binding something}}"
    Foreground="Black"
    FontSize="40"
    />

是否可以在 Windows 8.1 和 Windows Phone 8.1 的 通用商店应用程序中以某种方式做到这一点?有什么想法可以完全避免这样做吗?

我发现了一些与通用应用程序不兼容的过时项目:

是否有类似的通用应用程序?

I'd like to create a single converter instance

我在我的博客 (Xaml: Call Binding Converter Without Defining StaticResource in Xaml Thanks to Markup Derived Base Class in C#) 上写了一篇关于这种操作的方法的文章。

让我解释一下我自己的文章。


一旦使用基础 classes 的单例定义转换器,就不必在页面资源中创建转换器。

public class BooleanToVisibilityReverseConverter : 
                         CoverterBase<BooleanToVisibilityReverseConverter>, 
                         System.Windows.Data.IValueConverter

这里是 Xaml 中的访问示例(页面资源中没有创建静态)只是对转换器的简单命名空间访问:

<DataGrid Grid.Row="1"
          Visibility="{Binding IsEditing, 
                       Converter={ converters:BooleanToVisibilityReverseConverter } 
                      }">

随后访问是直接在命名空间中,并且为每个页面只创建一个。

这里是基础class:

/// <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));
    }
}

要获得更好的概述,请参阅我的博客文章。

Windows 8.1 和 Windows Phone 8.1.

的通用商店项目目前无法使用相关功能。