c# - 为什么转换器没有被调用

标签 c# wpf mvvm

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

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

我的部分类(class)代码是
  public partial class MainWindow : Window
{
    public Model Model
    {
        get;
        set;
    }


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

        InitializeComponent();
    }
} 

好像我像这样更改我的代码和xaml,它调用convereter
  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;
    }
} 

现在下面的绑定(bind)将起作用:
<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;
    }
} 

关于c# - 为什么转换器没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18417478/

相关文章:

c# - (包装器托管到 native )Realms.NativeTable.get_string 中的 Realm 查询出错

c# - string.Format、正则表达式 + 大括号 (C#)

c# - 从现有表达式在父对象上创建表达式树,用于 c# mongodb 驱动程序解析

wpf - 如何使 WPF 图像控件与其 (BitmapImage) 源具有相同的尺寸?

c# - 检查一个字符串是否存在于另一个字符串中的测试用例

c# - 从桌面 WPF 应用程序中的页面导航到新页面或窗口

c# - MVVM - WPF 如何将我的 View 绑定(bind)到我的 View 模型?

mvvm - Prism mvvm 中的 ViewModelLocator

c# - 在泛型集合的泛型方法上使用表达式lambda

wpf - IDataErrorInfo - 即使收到一条错误消息,也看不到任何错误消息