为什么转换器没有被调用

时间:2013-08-24 10:20:25

标签: c# wpf mvvm

我有转换器将我的集合更改为值列表及其类型。我的转换器接受类类型并返回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一样,它调用了更为严肃的

  public MainWindow()
    {
        DataContext=new Model();

        InitializeComponent();
    }

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

你能否告诉我发生这种情况的原因。我更喜欢第一种方式,但不知怎的,它不会调用转换器。

1 个答案:

答案 0 :(得分:1)

在第一个例子中:

它不起作用,因为你没有分配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 pattern并分配给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;
    }
}