1

我有转换器将我的集合更改为值列表及其类型。我的转换器接受一个类类型并返回一个 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}}"/>

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

4

1 回答 1

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 模式并分配给 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;
    }
} 
于 2013-08-24T10:25:22.397 回答