2014-01-08 66 views
0

我有一個WPF ListView,其中我添加了具有字符串和圖像的對象。根據對象的其他內容,該圖像應該是有條件顯示的星形。在我的XAML中,我將它綁定到一個名爲「Brand」的屬性,該屬性返回一個BitmapImage。如果我總是試圖展示圖片,一切工作正常。如果我試圖有條件地顯示圖像(通過一些C#),我無法獲得ListView更新。wpf 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> 

以下兩行是我如何將我的對象添加到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

EDIT 1 I增加了更多的代碼。

+0

這不回答你的問題,但你應該始終* *檢查的事件處理程序是否爲空第一(根據約翰的答案)。 –

+0

我認爲我們需要看到更多的視圖模型類和/或更多的XAML。 –

+0

我更新了代碼。這很簡單。沒有其他XAML更改值得注意,因爲它們只與屏幕上的其他項目有關。 –

回答

0

檢查處理程序調用之前爲空:

public BitmapImage Brand 
{ 
    get 
    { 
     // ... 
    } 
    set 
    { 
     if (Equals(value, _brand)) return; 
     _brand = value; 
     OnPropertyChanged(); 
    } 
} 

protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
{ 
    var handler = PropertyChanged; 
    if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
} 
+0

是的,我知道那個。但爲什麼它是空的? –

+0

當沒有訂閱它時,它爲空。 –

+1

我想OP是想問爲什麼沒有訂戶。 –