Источник привязки не обновляется, если значение DependencyProperty установлено на ноль - PullRequest
0 голосов
/ 01 октября 2019

У меня есть собственный UserControl. Он состоит из TextBox и Button. Целью этого пользовательского элемента управления является предоставление пользователю возможности видеть содержимое объекта ToString (), которое устанавливается в XAML через Binding, а также разрешать ему устанавливать объект в значение NULL. Это код XAML и C # UserControl

<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значение должно быть установлено в ноль. Хотя это работает, изменение не отражается на источнике привязки, который является TestObject (строка). Однако, когда я устанавливаю значение SelectedObject в другое значение, например «123» или «abc», изменение корректно отражается в TestObject. Является ли это поведение преднамеренным, и есть ли способ изменить его так, чтобы измененное значение SelectedObject всегда отражало источник привязки?

1 Ответ

0 голосов
/ 02 октября 2019

Источник привязки не обновляется, если для DependencyProperty задано значение NULL

Комментарий Юрия Фарензена верен, он завершается неудачно при вызове ToString() с нулевым объектом. Почему мы не можем получить исключение в Visual Studio. Поскольку исключение было зафиксировано внутри и перестало отражаться на источник привязки.

Для ваших требований используйте string.Empty для замены на ноль.

SelectedObject = string.Empty

Обновление

Решение Op

Реализация пользовательского IValueConverter и использование value?.ToString(), чтобы определить, является ли значение нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...