У меня есть собственный 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 всегда отражало источник привязки?