C# DependencyProperty'时绑定源未更新;s值设置为空
我有一个自定义用户控件。它由一个文本框和一个按钮组成。此用户控件的目标是允许用户查看对象的ToString()内容,该内容通过绑定在XAML中设置,还允许用户将对象设置为NULL。 这是UserControl的XAML和C代码C# DependencyProperty'时绑定源未更新;s值设置为空,c#,uwp,binding,C#,Uwp,Binding,我有一个自定义用户控件。它由一个文本框和一个按钮组成。此用户控件的目标是允许用户查看对象的ToString()内容,该内容通过绑定在XAML中设置,还允许用户将对象设置为NULL。 这是UserControl的XAML和C代码 <UserControl <Grid> <TextBox Text="{x:Bind SelectedObject.ToString(), Mode=OneWay}" IsReadOnly="True" />
<UserControl
<Grid>
<TextBox Text="{x:Bind SelectedObject.ToString(), Mode=OneWay}" IsReadOnly="True" />
<Button Click="buttonDeselectObject_Click" IsEnabled="True" Content="X"/>
</Grid>
</UserControl>
这是我在UWP页面中使用它的方式:
<local1:ObjectSelectorBox SelectedObject="{x:Bind TestObject, Mode=TwoWay}"/>
当用户按下按钮时,SelectedObject值应设置为null。虽然这确实有效,但更改不会反映到绑定源TestObject(string)。
但是,当我将SelectedObject值设置为“123”或“abc”等其他值时,更改会正确地反映到TestObject。
这种行为是故意的吗?是否有办法将其更改为SelectedObject始终反映到绑定源
DependencyProperty的值设置为null时绑定源未更新
Iuri Farenzena的评论是正确的,当使用null对象调用ToString()
时,它会失败。为什么我们不能在VisualStudio中获得异常。因为异常已在内部捕获并停止向绑定源反射
根据您的要求,请使用string.Empty
替换null
SelectedObject = string.Empty
更新
Op的解决方案
实现自定义的
IValueConverter
,并使用value?.ToString()
确定值是否为null。您的绑定尝试对null对象调用.ToString(),然后失败。哦。哇!我没有意识到这一点。我已经习惯了用visualstudio来喂养我。唉。无论如何,非常感谢你:非常感谢你的澄清。我最终实现了一个定制的IValueConverter,它不提供值?.ToString()。
SelectedObject = string.Empty