首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绑定Binding.Converter属性?

如何绑定Binding.Converter属性?
EN

Stack Overflow用户
提问于 2015-02-26 12:28:00
回答 2查看 991关注 0票数 0

我希望绑定到Converter属性,而不是使用{StaticResource ResourceKey}作为其值。

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

代码语言:javascript
复制
<!-- not working -->
<TextBlock 
    Text="{Binding Converter={Binding something}}"
    Foreground="Black"
    FontSize="40"
    />

在Windows 8.1和Windows 8.1的通用存储应用程序中,是否有可能做到这一点?有什么好办法避免这样做吗?

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

  • 2012年9月18日:可弯曲转换器、转换器参数和StringFormat
  • 2013年7月2日:可弯曲转换器参数

对于通用应用来说,有这样的东西吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-16 09:37:16

目前,Windows8.1和Windows 8.1的通用存储项目都无法使用该功能。

票数 0
EN

Stack Overflow用户

发布于 2015-02-26 13:53:05

我想创建一个转换器实例

我在博客(Xaml:在Xaml中调用绑定转换器而不定义StaticResource,这要归功于C#中的标记派生基类)上写了一篇关于这种操作的方法的文章。

让我转述一下我自己的文章。

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

代码语言:javascript
复制
public class BooleanToVisibilityReverseConverter : 
                         CoverterBase<BooleanToVisibilityReverseConverter>, 
                         System.Windows.Data.IValueConverter

下面是在Xaml中访问的一个例子(页面的资源中没有静态创建),只是对转换器的一个简单的名称空间访问:

代码语言:javascript
复制
<DataGrid Grid.Row="1"
          Visibility="{Binding IsEditing, 
                       Converter={ converters:BooleanToVisibilityReverseConverter } 
                      }">

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

下面是基类:

代码语言:javascript
复制
/// <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));
    }
}

有关更好的概述,请参阅我的博客文章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28742479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档