【发布时间】:2014-01-08 18:35:25
【问题描述】:
我有一个 WPF ListView,我在其中添加了具有字符串和图像的对象。图像应该是类似星星的东西,根据对象的其他内容有条件地显示它。在我的 XAML 中,我将它绑定到一个名为“Brand”的属性,该属性返回一个 BitmapImage。如果我总是尝试显示图像,一切正常。如果我尝试有条件地显示图像(通过一些 C#),我无法更新 ListView。
我尝试将 INotifyPropertyChanged 添加到添加到 ListView 的对象中,这样我就可以在我希望图像出现时手动触发事件。问题是事件始终为空。就像 ListView 没有订阅它一样。
<ListView Name="MyListView" Grid.Row="3" SelectionMode="Multiple">
<ListView.View>
<GridView>
<GridViewColumn Header="Brand">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Brand}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
以下 2 行是我将对象添加到 ListView 的方式。数据是从文件中读出的,我省略了一些变量设置。
LineItem li = new LineItem();
MyListView.Items.Add( li );
这是类减去其他属性后的样子。
public class LineItem : IComparable, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public bool PersistedBrand { get { return m_brand; }
set {
m_brand = value;
Brand = null;
//PropertyChanged(this, new PropertyChangedEventArgs("Brand"));
} }
public BitmapImage Brand
{
get
{
if (ShowBrand)
{
return s_brandImage;
}
else
{
return null;
}
}
set
{
PropertyChanged(this, new PropertyChangedEventArgs("Brand"));
// EXCEPTION HERE ABOVE!
}
}
}
我在这里对绑定应该如何工作的理解有误吗?任何建议表示赞赏。
mj
编辑 1 我添加了更多代码。
【问题讨论】:
-
这不能回答您的问题,但您应该始终首先检查事件处理程序是否为空(根据 Johan 的回答)。
-
我认为我们需要看到更多的视图模型类和/或更多的 XAML。
-
我更新了代码。这真的很简单。没有其他值得注意的 XAML 更改,因为它们仅与屏幕上的其他项目相关。