gpt4 book ai didi

c# - ListView 数据不会在 WPF 应用程序中刷新

转载 作者:行者123 更新时间:2023-11-30 12:29:13 27 4
gpt4 key购买 nike

我正在尝试使用存储过程和 Entity Framework 将数据加载到 WPF 中的 ListView 中。当我第一次加载用户控件时,ListView 加载数据就好了。然后我调用相同的代码来刷新数据,通过调试我可以看到 ListItems 计数发生了变化,但前端屏幕上的数据没有更新。

XAML

<ListView Name="DocsListView" ItemsSource="{Binding}">
<ListView.View>
<GridView>
<GridViewColumn Header="Documents" DisplayMemberBinding="{Binding Documents}"/>
</GridView>
</ListView.View>
</ListView>

代码隐藏

public void LoadDocs()
{
Context _Context = new Context();
DocsListView.ItemsSource = null;
DocsListView.ItemsSource = _Context.SP_GetDocuments(1).ToList();
_Context = null;
}

有人可以帮我弄清楚我做错了什么吗?我正在使用 VS2012、.Net 4.5 和 EF 5.0。

最佳答案

我不确定是什么导致了问题,通常我会建议使用 DependencyProperty!

但是您可以尝试像这样刷新 ListView:

ICollectionView view = CollectionViewSource.GetDefaultView(DocsListView.ItemsSource);
view.Refresh();

如果这将是一个更大的项目,我强烈建议您看看 MVVM DesignPattern!

WPF and MVVM一起玩得很好。您可以使用不错的库,例如 MVVMLight .

您还应该看看 INotifyPropertyChanged Interface .

XAML 代码(不要忘记设置 DataContext)

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<ListView Name="DocsListView" ItemsSource="{Binding Data}">
<ListView.View>
<GridView>
<GridViewColumn Header="Documents" DisplayMemberBinding="{Binding Documents}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>

C# 代码隐藏(如果添加或删除项目,ObservableCollection 会自动刷新 UI):

public ObservableCollection<YourEntity> Data
{
get { return (ObservableCollection<YourEntity>)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}

// Using a DependencyProperty as the backing store for Data. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register("Data", typeof(ObservableCollection<YourEntity>), typeof(MainWindow), null);

public void LoadDocs()
{
Context _Context = new Context();
if(Data == null)
{
Data = new ObservableCollection<YourEntity>();
}
else
{
Data.Clear();
}
foreach(var doc in _Context.SP_GetDocuments(1).ToList())
{
Data.Add(doc);
}
_Context = null;
}

关于c# - ListView 数据不会在 WPF 应用程序中刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19164958/

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