C# GridView实现使用MVVM模式后,再使用UnboundSource绑定数据源 怎么实现
时间: 2024-10-12 13:11:28 浏览: 26
在C#中,GridView通常用于显示和操作数据库中的数据,当使用MVVM(Model-ViewModel)设计模式时,你需要将数据处理、视图和命令分离。如果要在GridView上使用UnboundSource绑定而不直接依赖数据上下文(DataContext),你可以按照以下步骤操作:
1. **模型(Model)**:
- 创建一个专门的数据模型类,如`ProductItemViewModel`,包含属性表示视图需要展示的数据,比如`ProductName`, `Price`等。
2. **视图(View) - XAML**:
```xml
<asp:GridView ID="GridView1" Name="GridView1"
ItemsSource="{Binding Source={x:Static local:ViewModelLocator.Products}}"/>
```
在这里,我们使用了`ViewModelLocator` (一种常见的实践),它是一个静态类,提供对ViewModel的访问,而`Products`则应该返回一个`ICollectionView`(UnboundSource的实例)。
3. **视图模型(View Model) - ViewModel**:
- 创建一个`ProductsViewModel`类,继承自`ICollectionViewSource`或实现`ICollectionViewSource`接口。
- 初始化`ICollectionView`时,设置其`Source`属性指向实际的数据源(数据库查询结果、列表或其他数据结构)。
```csharp
public class ProductsViewModel : ICollectionViewSource
{
private readonly List<ProductItemViewModel> _products;
public ProductsViewModel()
{
_products = GetProductsFromDatabase(); // 调用你的数据获取方法
var collectionView = new CollectionViewSource();
collectionView.Source = _products;
CurrentView = collectionView.View;
}
public IEnumerable<ProductItemViewModel> Source => _products;
}
```
4. **依赖注入(可选) - 如果应用支持DI**:
- 注册ViewModel到服务容器,以便在页面加载时自动注入到XAML中。
5. **关联视图和命令**:
- 在ViewModel中,为表格的操作(比如添加、编辑、删除等)创建对应的命令,并在需要的地方订阅事件处理。
6. **事件通知**: 当数据源变化时,通过命令发布消息给视图层更新。
阅读全文