数日間、解決できないかなり深刻な問題があります。
ItemsSource
別のカスタム型を含むカスタム型の静的プロパティにバインドされたデータグリッドを含む XAML ウィンドウがあります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);
}
}
MainWindow.CurrentUser.TaggedImages
他のものから手動でbackgroundworker
追加するとうまくいきますが、そこから追加bgwPictureFinder_ProgressChanged
すると画像が追加されますMainWindow.CurrentUser.TaggedImages observableCollection
が、UI は更新されずに画像が表示されます。
この問題の原因を突き止めることはできません。