【发布时间】:2020-01-31 00:01:24
【问题描述】:
我有一个自定义的用户控件。它由一个 TextBox 和一个 Button 组成。此用户控件的目标是允许用户查看通过绑定在 XAML 中设置的对象的 ToString() 内容,并允许用户将对象设置为 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 始终反映到绑定源?
【问题讨论】:
-
您的绑定尝试在空对象上调用 .ToString(),然后失败。
-
哦。哇。我没有意识到这一点。我必须习惯于引发异常和 Visual Studio 喂我。叹。无论如何,非常感谢你:D