用于字典绑定的WPF TargetNullValue不起作用

时间:2018-10-13 09:15:09

标签: .net wpf vb.net

我有一个字典(字符串,字符串),可能没有特定键的条目。

在XAML中,我想通过以下几行介绍这种情况:

<Image Source="{Binding MyDictonary[myKey], UpdateSourceTrigger=PropertyChanged, Converter={StaticResource uriToImageConverter}, TargetNullValue={StaticResource myStaticImage} }"/>

如果我没有绑定到字典,但是我的视图模型中有一个Nothing的字符串,则该代码可以正常工作。

我还检查了它是否是转换器的保险库,但是如果没有有效的字符串,则永远不会调用该转换器。

在此先感谢您所缺少的帮助/解释。

1 个答案:

答案 0 :(得分:1)

您需要为No.ing的“ myKey”添加字典条目(MyDictonary.Add(“ myKey”,Nothing)),以便它可以在不引起异常的情况下获取“ Nothing”值。

另一种实现此目的的方法是在ViewModel上添加一个附加的“ DictionaryValue”属性。

<StackPanel>
    <TextBox Text="{Binding DictionaryKey, UpdateSourceTrigger=PropertyChanged}"/>
    <Image Source="{Binding DictionaryValue, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource uriToImageConverter}, TargetNullValue={StaticResource myStaticImage} }"/>
</StackPanel>


Public Class ViewModel
    Inherits INotifyPropertyChanged

    Public Sub New()
        MyDictonary = New Dictionary(Of String, String)()
    End Sub

    Private _key As String

    Public Property DictionaryKey As String
        Get
            Return _key
        End Get
        Set(ByVal value As String)

            If _key <> value Then
                _key = value
                RaisePropertyChanged(NameOf(DictionaryKey))
                RaisePropertyChanged(NameOf(DictionaryValue))
            End If
        End Set
    End Property

    Public ReadOnly Property DictionaryValue As String
        Get

            If DictionaryKey IsNot Nothing AndAlso MyDictonary.Keys.Contains(DictionaryKey) Then
                Return MyDictonary(DictionaryKey)
            Else
                Return Nothing
            End If
        End Get
    End Property

    Public Property MyDictonary As Dictionary(Of String, String)
    Public Event PropertyChanged As PropertyChangedEventHandler

    Private Sub RaisePropertyChanged(ByVal propertyName As String)
        PropertyChanged?.Invoke(Me, New PropertyChangedEventArgs(propertyName))
    End Sub
End Class