【发布时间】:2010-12-01 14:12:30
【问题描述】:
我一直在努力学习和利用 WPF 和数据绑定。我有一个列表视图,其中有一列将显示三个图像之一,如下面的 sn-p 所示:
<GridViewColumn Header="Status" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image x:Name="TheImage" Height="18"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Status}" Value="queued">
<Setter TargetName="TheImage" Property="Source" Value="Images\que_48.png" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Status}" Value="completed">
<Setter TargetName="TheImage" Property="Source" Value="Images\complete_48.png" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Status}" Value="failed">
<Setter TargetName="TheImage" Property="Source" Value="Images\fail_48.png" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
我有一个类 (BatchQueueItem),其中包含用于处理 PropertyChange 事件的代码:
public string status;
public string Status
{
get { return status; }
set
{
status = value;
OnPropertyChanged("Status");
}
}
// Create the OnPropertyChanged method to raise the event
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string status)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(status));
}
}
我在列表视图窗口页面上有一个按钮:
private void btnStart_Click(object sender, RoutedEventArgs e)
{
foreach (var item in listView1.Items)
{
BatchQueueItem bqi = (BatchQueueItem)item;
string currFile = bqi.CurrFile;
if (mainWindow.isIsbnInFileName(ref currFile))
{
bqi.Status = "completed";
}
else
{
bqi.Status = "failed";
}
}
}
我遇到的问题是图像直到 foreach 循环完成并且 btnStart_Click() 方法完成后才会更新。一旦发生这种情况,所有图像都会按预期更新,而不是迭代地一次更新。
我想要并且我认为会发生的事情是,foreach 循环的每次迭代都会更新相应行的图像。毫无疑问,我错过了关于这一切如何运作的重要信息。有什么建议吗?
【问题讨论】:
标签: c# wpf listview inotifypropertychanged