gpt4 book ai didi

c# - WPF MVVM DataGrid 过滤使用组合框

转载 作者:行者123 更新时间:2023-12-03 10:22:29 26 4
gpt4 key购买 nike

我有一个带有 DataGrid 和 ComboBox 的 WPF MVVM 应用程序,它们绑定(bind)到 ViewModel 类中的相同实体列表。
我想通过 ComboBox 选择过滤 DataGrid 条目,这样做的正确方法是什么?由于我正在使用 MVVM,因此我想通过数据绑定(bind)来实现这一点,并避免后面出现无用的代码。

我的 XAML 代码如下

<DataGrid ItemsSource="{Binding Posts}" AutoGenerateColumns="False" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}" />
<DataGridTextColumn Header="Title" Binding="{Binding Title}" />
<DataGridTextColumn Header="BlogUrl" Binding="{Binding Blog.Url}" />
</DataGrid.Columns>
</DataGrid>

<ComboBox ItemsSource="{Binding Posts}"
DisplayMemberPath="Blog.Url" />

View 模型
public class MainWindowViewModel
{
private SqliteDbContext context;
public List<Post> Posts { get; set; }

public MainWindowViewModel()
{
context = new SqliteDbContext();
Posts = context.Posts.Include(p => p.Blog).ToList();
}
}

此外,使用此代码,我的 ComboBox 显示了 Urls 的重复项,我如何区分这些值?

谢谢。

最佳答案

这应该可以解决问题。

查看型号 :

public class MainWindowViewModel
{
private SqliteDbContext context;

public ObservableCollection<Post> Posts { get; set; }
private string _selectedUrl;
public ICollectionView PostsView { get; set; }
public MainWindowViewModel()
{
context = new SqliteDbContext();
Posts = new ObservableCollection<Post>(context.Posts.Include(p => p.Blog));
PostsView = new CollectionViewSource { Source = Posts }.View;
PostsView.Filter = post => SelectedUrl == null || SelectedUrl == ((Post)post).Blog.Url;
}

public string SelectedUrl
{
get
{
return _selectedUrl;
}
set
{
_selectedUrl = value;
PostsView.Refresh();
}
}
}

XAML :
<DataGrid ItemsSource="{Binding PostsView}" AutoGenerateColumns="False" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}" />
<DataGridTextColumn Header="Title" Binding="{Binding Title}" />
<DataGridTextColumn Header="BlogUrl" Binding="{Binding Blog.Url}" />
</DataGrid.Columns>
</DataGrid>

<ComboBox ItemsSource="{Binding Posts}"
DisplayMemberPath="Blog.Url"
SelectedValuePath="Blog.Url"
SelectedValue="{Binding SelectedUrl}"/>

关于c# - WPF MVVM DataGrid 过滤使用组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43274007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com