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