Tim*_*ann 7 c# data-binding wpf nullable
TargetNullValue应该Target在绑定Source评估时更新绑定null:
获取或设置当源的值为null时在目标中使用的值.
除此之外,当值等于给定时,它似乎也设置Source为null(如果可能的话).换句话说,它有效地建立了与财产价值之间的等价关系.但是文档中根本没有提到这一点.TargetTargetNullValuenullTargetNullValue
看这个例子:
<Window x:Class="WPF_Sandbox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF_Sandbox"
Title="MainWindow"
x:Name="ThisControl">
<StackPanel x:Name="MainStackPanel">
<TextBox x:Name="MyTextBox" Text="{Binding NullableInt, ElementName=ThisControl, TargetNullValue='', UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
</Window>
public partial class MainWindow : Window
{
private int? nullableInt;
public int? NullableInt
{
get { return nullableInt; }
set { nullableInt = value; }
}
public MainWindow()
{
InitializeComponent();
}
}
Run Code Online (Sandbox Code Playgroud)
注意:UpdateSourcetrigger仅设置为使测试更容易,并且与所讨论的效果无关.
如果你在NullableIntsetter中放置一个断点,你可以看到value == null当你改变TextBox内容时它会被触发(带)''.
这是一种无证的行为TargetNullValue还是在这里有其他副作用?
编辑:我偶然发现了这个话题,因为我正在研究这个问题:
在WPF绑定中将值设置为null
这似乎是无证行为.如果在检索要使用的值时查看BindingExpressionBase.GetRawProposedValue(),它实际上会检查该值是否等于TargetNullValue,如果是,则使用null:
internal virtual object GetRawProposedValue()
{
object value = Value;
// TargetNullValue is the UI representation of a "null" value. Use null internally.
if (Object.Equals(value, EffectiveTargetNullValue))
{
value = null;
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
(EffectiveTargetNullValue最终在哪里TargetNullValue).
实际上,如果您将自己TargetNullValue设置为5而不是空字符串,您将看到键入5将属性重置为null.
| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |