转换器可以用xaml中的参数实例化吗? [处于保留状态]

问题描述 投票:-2回答:1

我有一个带参数化构造函数的IValueConverter继承的类MyConverter

我如何从XAML调用此构造函数以在绑定中使用转换器?

虽然我可以从代码中做到这一点:

Student student = new Student() { Name = "Zhu" };

Binding binding = new Binding("Number")
{
    Converter = new MyConverter(student),
    Source = ...
};
wpf xaml converters
1个回答
0
投票

一种简单且推荐的方法是使用属性元素语法。

MyConverter.cs

public class MyConverter : IValueConverter
{
  public Student Student { get; set; }

  public MyConverter()
  {}

  // IValueConverter implementation
}

Student.cs

public class Student
{
  public string Name { get; set; }
}

MainWindow.cs

<Window>
  <Window.Resources>
    <MyConverter x:Key="MyConverter">
      <MyConverter.Student>
        <Student Name="Zhu" />
      </MyConverter.Student>
    </MyConverter>
  </Window.Resources>
</Window>

[另一个通用选项是也可以使用ObjectDataProvider作为绑定源,从而允许绑定到方法并使用参数化构造函数实例化类型。但是由于ObjectDataProvider属性不是Binding.Converter,因此您无法对其进行绑定,这会使DependecyProperty在您的情况下无用(因为它只能用作绑定源)。

© www.soinside.com 2019 - 2024. All rights reserved.