为什么转换器没有被调用

本文关键字:调用 转换器 为什么 | 更新日期: 2023-09-27 18:28:56

我有一个转换器,可以将我的集合更改为值及其类型的列表。我的转换器接受一个类类型并返回一个IEnumerable

<ListView ItemsSource="{Binding Model,Converter={StaticResource PropConverter}}"/>

我的部分类代码是

  public partial class MainWindow : Window
{
    public Model Model
    {
        get;
        set;
    }

    public MainWindow()
    {
        Model=new Model();
        InitializeComponent();
    }
} 

如果我更改代码并像这样进行xaml,它就会调用converereter

  public MainWindow()
    {
        DataContext=new Model();
        InitializeComponent();
    }
 <ListView ItemsSource="{Binding Converter={StaticResource PropConverter}}"/>

你能告诉我发生这种事的原因吗。我更喜欢第一种方式,但不知何故,它不调用转换器。

为什么转换器没有被调用

在第一个例子中:

它不起作用,因为您没有分配DataContext,所以它等于null。

您可以通过分配给DataContext值来修复它:

public partial class MainWindow : Window
{
    public Model Model
    {
        get;
        set;
    }
    public MainWindow()
    {
        Model=new Model();
        InitializeComponent();
        this.DataContext = this;
    }
} 

现在以下绑定将起作用:

<ListView ItemsSource="{Binding Model,Converter={StaticResource PropConverter}}"/>

更好的选择是学习MVVM模式并分配给DataContext ViewModel:

public class MainViewModel
{
    public MainViewModel()
    {
        Model = new Model();
    }
    public Model Model
    {
        get;
        set;
    }
}

视图:

public partial class MainWindow : Window
{
    MainViewModel _vm;
    public MainWindow()
    {
        InitializeComponent();
        _vm = new MainViewModel();
        this.DataContext = _vm;
    }
}