![](/img/trans.png)
[英]ListView DataBindig using MVVM (WPF, ListView, Binding)
[英]Binding ListView using MVVM pattern
我正在尝试将 ListView 控件与视图模型中的 List 绑定。 它不起作用,我在stackoverflow中找到了那个线程: MVVM Pattern Listview ,并按照我在 ObservableCollection 上更改了 List 的答案。 编译后我可以将新对象添加到列表视图,但它们是空的,尽管我在命令中将它们设置为默认值。 我做错了什么? 如何正确绑定我的收藏?
XAML 代码:
<ListView Grid.ColumnSpan="5" Grid.RowSpan="4" x:Name="ProductListView" ItemsSource="{Binding Products}">
<ListView.View>
<GridView>
<GridViewColumn Header="Products" DisplayMemberBinding="{Binding Path=Name}" />
</GridView>
</ListView.View>
</ListView>
<Button Grid.Row="0" Grid.Column="5" Content="Add" Command="{Binding AddProduct}" />
视图模型代码:
public MainViewModel(MainWindow view)
{
model = new MainModel();
this.view = view;
Products = new ObservableCollection<Product>();
Products.Add(new Product() { Name="Example"});
}
public ObservableCollection<Product> Products
{
get => model.Products;
set
{
model.Products = value;
OnPropertyChanged(nameof(Products));
}
}
public ICommand AddProduct
{
get
{
addProduct = new RelayCommand((object o) => {
Products.Add(new Product() { Name="New product"} );
}, null);
return addProduct;
}
}
型号代码:
internal ObservableCollection<Product> Products = new ObservableCollection<Product>();
我建议您删除 Products 属性的设置器: public ObservableCollection<Product> Products
。 问题是当您在绑定完成后分配它时,您会将项目添加到不同的集合中。
改用这个:
public ObservableCollection<Product> Products { get; } =
new ObservableCollection<Product>();
这个this.view = view;
我不知道。 应该是this.DataContext = view;
?
凭借我对 MVVM 的(中级)知识:
所以把public ObservableCollection<Product> Products { get; } = new ObservableCollection<Product>();
public ObservableCollection<Product> Products { get; } = new ObservableCollection<Product>();
在 ModelView 而不是模型中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.