0

我在 Visual Studio 2010 Express 中使用 VB.NET 和 WPF。

目前,我有:

  • 一个名为downloadListDG的 DataGrid 。这有一个列,它是一个包含图像的模板。
  • 自定义DownloadListItem类的ObservableCollection 。
  • DownloadListItem有一个公共属性,它是另一个自定义类。
  • 这个类有一个私有的 dim 是一个 StateType(一个自定义枚举)和一个公共的只读属性,它根据 StateType 是什么返回一个字符串(如果你好奇的话,实际上是一个图像 URI)。
  • DownloadListItem还有一个公共属性,它只返回 StateType(这仅用于绑定目的)

我的问题是,每当 StateType 更改时,DataGrid 中的图像列都不会更改。我一直在尝试使用IPropertyChangedNofity,但没有任何改变,所以要么我使用不正确,要么我需要使用另一种方法。

Implements INotifyPropertyChanged

Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

AddHandler ControllerRef.StateChanged, AddressOf StateChangeHandler

Private Sub StateChangeHandler(NewState As State)
    MsgBox(NewState)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("CurrentState"))
End Sub

提前致谢

4

1 回答 1

1

确保 PropertyChanged 事件通知 UI 您绑定的属性名称,而不是触发更改的属性。例子:

Imports System.ComponentModel

公共类 DownloadListItem :实现 INotifyPropertyChanged

Friend Enum StateEnum
    State1 = 0
    State2 = 1
End Enum

Private _CurrentState As StateEnum

Private Sub ChangeEnumValue(NewValue As StateEnum)
    _CurrentState = NewValue
    OnPropertyChanged("ImageURI")
End Sub

Public ReadOnly Property ImageURI As String
    Get
        ' TODO: Implement conditional logic to return proper value based on CurrentState Enum
    End Get
End Property

Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged

Protected Sub OnPropertyChanged(PropertyName As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(PropertyName))
End Sub

结束类

于 2012-11-06T21:05:35.203 回答