gpt4 book ai didi

c# - 更新绑定(bind)到它的 ObservableCollection 后,DataGrid 不会更新

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:18 25 4
gpt4 key购买 nike

我有一个非常严重的问题,这几天我无法解决。

我有一个带有数据网格的 XAML 窗口,其中 ItemsSource 绑定(bind)到自定义类型的静态属性,该自定义类型包含另一个自定义类型的 ObservableCollection

XAML:

<Window x:Class="TheFaceBook.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TheProject"
Title="MainWindow" MinHeight="253" MinWidth="882" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="632" d:DesignWidth="933" SizeToContent="WidthAndHeight">
<Window.Resources>
<local:MainWindow x:Key="mainWindow"/>
</Window.Resources>
<Grid>
<Button Content="Start" Height="33" Margin="0,28,12,0" VerticalAlignment="Top" Click="BtnStart_Click" HorizontalAlignment="Right" Width="97" />
<DataGrid Margin="12,110,12,42" AutoGenerateColumns="False" ItemsSource="{Binding CurrentUser.TaggedImages}" >
<DataGrid.Columns>
<DataGridTemplateColumn Width="50" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding AbsoluteURL}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding FacebookURL}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>

属性背后的代码:

private static User m_CurrentUser;
public static User CurrentUser
{
get { return MainWindow.m_CurrentUser; }
set
{
MainWindow.m_CurrentUser = value;
}
}

用户类:

private ObservableCollection <Picture> m_TaggedImages;

#endregion
#region Properties

public ObservableCollection<Picture> TaggedImages
{
get { return m_TaggedImages; }
set
{
m_TaggedImages = value;
}
}

图片类:

public class Picture : INotifyPropertyChanged
{

#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;

#endregion
private string m_URL;
private string m_AbsoluteURL;
private List<User> m_TaggedUsers;

public List<User> TaggedUsers
{
get { return m_TaggedUsers; }
set
{
m_TaggedUsers = value;
OnPropertyChanged("TaggedUsers");
}
}

public string AbsoluteURL
{
get { return m_AbsoluteURL; }
set
{
m_AbsoluteURL = value;
OnPropertyChanged("AbsoluteURL");
}
}

public string URL
{
get { return m_URL; }
set
{
m_URL = value;
OnPropertyChanged("URL");
}
}
}

将图片添加到 TaggedImagse 的代码:

在 bgwDoWork 中:

bgwPictureFinder.ReportProgress(0, pic);

bgwProgressChanged:

static void bgwPictureFinder_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.ProgressPercentage == 0)
{
Picture pic = (Picture)e.UserState;
MainWindow.CurrentUser.TaggedImages.Add(pic);
}
}

当我从其他一些 backgroundworker 手动添加到 MainWindow.CurrentUser.TaggedImages 时它工作得很好,但是当从 bgwPictureFinder_ProgressChanged 添加时它将图片添加到 MainWindow.CurrentUser.TaggedImages observableCollection 但不更新 UI 以显示图像。

我就是想不通是什么导致了这个问题。

最佳答案

我认为您在代码示例中错过了这一点:

protected void OnPropertyChanged(string propertyName)
{
var handlers = PropertyChanged;
if (handlers != null)
{
handlers(this, new PropertyChangedEventArgs(propertyName));
}
}

对于您的绑定(bind),我使用双向模式:

{Binding..., Mode=TwoWay}

关于c# - 更新绑定(bind)到它的 ObservableCollection 后,DataGrid 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12475080/

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