c# - 使用 XAML 中的通用 IValueConverter

标签 c# wpf xaml

我有一个实现IValueConverter 的通用类。像这样的东西:

class MyValueConverter<T> : IValueConverter

使用 XAML 2009,我可以这样使用它:

<my:MyValueConverter x:TypeArguments='x:String'/>

但显然“已编译”XAML 不允许这样做(我想我们将不得不等待 .NET 5)

我目前的解决方法是为每次使用对其进行子类化:

class FooMyValueConverter : MyValueConverter<Foo>

是否可以仅使用 XAML 2006 在标记中执行此操作?

最佳答案

您可能可以使用自定义 MarkupExtension 来做到这一点(archive)(v4)。像这样的东西:

public class MyMarkupExtension : MarkupExtension {

    public MyMarkupExtension() {
        this.Type = /* some default type */;
    }

    public MyMarkupExtension(Type type) {
        this.Type = type;
    }

    public Type Type { get; private set; }

    public override object ProvideValue(IServiceProvider serviceProvider) {
        Type type = typeof(MyValueConverter<>).MakeGenericType(this.Type);
        return Activator.CreateInstance(type);
    }
}

然后您可以像 {Binding ... Converter={local:MyMarkup {x:Type BounceEase}}} 那样使用它

关于c# - 使用 XAML 中的通用 IValueConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5833143/

相关文章:

c# - C# 中的多维数组搜索

c# - Xamarin 相当于 stringWithContentsOfFile :usedEncoding:error:

c# - 文本框asp.net中用户输入的自动日期格式

c# - 如何在使用 IDataErrorInfo 时检查模型是否有效或有错误

c# - 如何访问 C# 属性的方法? (特别是如果属性是一个集合并使用 INotifyPropertyChanged 接口(interface))

wpf - 当 wpf 数据网格的单元格中的值使用 MVVM 更改时,如何引发事件?

wpf - 在XAML中定义 View /演示者对的语法是什么?

c# - 应用程序设置绑定(bind)最佳实践

.net - KeyBinding 两个命令(一个在 VM 中,一个在 View 中)到一个键

c# - 寻找 n 层 C# 4 教程 : stored procs, Entity Framework 、pocos、业务逻辑、UI