문자열과 이미지가 모두 포함 된 객체를 추가하는 WPF ListView가 있습니다. 이미지는 별처럼 다른 곳에있는 객체의 내용에 따라 조건부로 표시됩니다. 내 XAML에서는 BitmapImage를 반환하는 "Brand"라는 속성에 바인딩했습니다. 항상 이미지를 표시하려고하면 모든 것이 잘됩니다. 조건부로 이미지를 표시하려고하면 (C#을 통해) ListView를 업데이트 할 수 없습니다.wpf listview 항목이 업데이트되었습니다. 속성 이벤트 핸들러가 null입니다.
내가 시도한 이미지를 표시 할 때마다 이벤트를 수동으로 트리거 할 수 있도록 ListView에 추가 된 개체에 INotifyPropertyChanged를 추가하는 것입니다. 문제는 이벤트가 항상 null이라는 것입니다. 그것은 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
편집 1 코드를 추가했습니다. 핸들러가 호출하기 전에 null의 경우
이 답변으로 문제가 해결되지 않습니다,하지만 당신은 * 항상 * 이벤트 핸들러가 null 여부를 확인해야합니다 첫 번째 (요한의 대답에 따라). –
뷰 모델 클래스 및/또는 XAML을 더 많이 볼 필요가 있다고 생각합니다. –
코드를 업데이트했습니다. 정말 간단합니다. 주목할 가치가있는 다른 XAML 변경 사항은 화면의 다른 항목에만 관련되어 있기 때문에 주목할 가치가 없습니다. –