当DependencyProperty的值设置为null时,绑定源不更新

时间:2019-10-01 16:42:31

标签: c# uwp binding

我有一个自定义的UserControl。它由一个TextBox和一个Button组成。该用户控件的目的是允许用户查看对象的ToString()内容,该内容通过绑定在XAML中设置,还允许他们将对象设置为NULL。 这是UserControl的XAML和C#代码

<UserControl
    <Grid>
        <TextBox Text="{x:Bind SelectedObject.ToString(), Mode=OneWay}" IsReadOnly="True" />
        <Button Click="buttonDeselectObject_Click" IsEnabled="True" Content="X"/>
    </Grid>
</UserControl>
public sealed partial class ObjectSelectorBox : UserControl 
{
    public ObjectSelectorBox ()
    {
        this.InitializeComponent ();

        textBoxSelectedObject.AddHandler (TappedEvent, new TappedEventHandler (TextBox_Tapped), true);
    }

    public object SelectedObject 
    {
        get => GetValue (SelectedObjectProperty);
        set => SetValue (SelectedObjectProperty, value);
    }

    public static readonly DependencyProperty SelectedObjectProperty = DependencyProperty.Register ("SelectedObject", typeof (object), typeof (ObjectSelectorBox), null);

    private void buttonDeselectObject_Click (object sender, RoutedEventArgs e) 
    {
        //This is where the SelectedObject binding source should be set to NULL

        SelectedObject = null; //This works but does NOT reflect to the binding source
        SelectedObject = "123"; //This works and does reflect to the binding source
    }
}

这是我在UWP页面中使用它的方式:

<local1:ObjectSelectorBox SelectedObject="{x:Bind TestObject, Mode=TwoWay}"/>

当用户按下按钮时,SelectedObject值应设置为null。尽管这确实可行,但更改不会反映到绑定源TestObject(字符串)。 但是,当我将SelectedObject值设置为其他类似“ 123”或“ abc”的值时,更改将正确反映到TestObject。 这种行为是否是故意的,是否有办法将其更改为更改为SelectedObject始终反映到绑定源?

1 个答案:

答案 0 :(得分:0)

  

当DependencyProperty的值设置为null时,绑定源不会更新

Iuri Farenzena的注释正确,当使用空对象调用ToString()时,注释将失败。为什么我们在Visual Studio中无法获得异常。因为异常已在内部捕获,并停止反映到绑定源。

根据您的要求,请使用string.Empty替换空值。

SelectedObject = string.Empty

更新

Op的解决方案

实施自定义IValueConverter并使用value?.ToString()确定值是否为空。