WPF 文本块 TargetNullValue 不起作用?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22315699/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 11:10:59  来源:igfitidea点击:

WPF Textblock TargetNullValue not working?

c#wpfxamltextblocktargetnullvalue

提问by SuicideSheep

I have a wpf textblock as below:

我有一个 wpf 文本块,如下所示:

<TextBlock Text="{Binding [someViewModel].SomeVar.SomeSubVar.Name, 
                          TargetNullValue='-'}"/>

At my viewmodel side, I'll have my own logic that in the end, SomeVar.SomeSubVarwill be null.

在我的视图模型方面,我将拥有自己的逻辑,最终SomeVar.SomeSubVar将为空。

If I want to show a default value for this TextBlockI know I can declare and initiate SomeVar.SomeSubVarand assign default value into SomeVar.SomeSubVar.Namebut I would like to use TargetNullValueinstead. May I know which part is wrong?

如果我想为此显示一个默认值,TextBlock我知道我可以声明和启动SomeVar.SomeSubVar并将默认值分配给,SomeVar.SomeSubVar.Name但我想改为使用TargetNullValue。我可以知道哪个部分有问题吗?

回答by Shawn Rakowski

You might look at using FallbackValue http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.fallbackvalue(v=vs.110).aspxin conjunction with TargetNullValue.

您可能会考虑将 FallbackValue http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.fallbackvalue(v=vs.110).aspx与 TargetNullValue 结合使用。

In order for TargetNullValue to work you must be able to evaluate the full path of [someViewModel].SomeVar.SomeSubVar.Name to null. If 'someViewModel', 'SomeVar', or 'SomeSubVar' are null then 'Name' can never be evaluated, and TargetNullValue won't apply.

为了使 TargetNullValue 工作,您必须能够将 [someViewModel].SomeVar.SomeSubVar.Name 的完整路径评估为 null。如果“someViewModel”、“SomeVar”或“SomeSubVar”为空,则永远无法评估“Name”,并且 TargetNullValue 将不适用。

回答by Tony Vitabile

The Binding's TargetNullValueproperty is displayed in the TextBlockif the [somveViewModel].SomeVar.SomeSubVar.Nameproperty is null. It doesn't cane the value of the [somveViewModel].SomeVar.SomeSubVar.Nameproperty. It effectively sets up an equivalency between null and the TargetNullValueproperty's value.

Binding's TargetNullValue属性显示在TextBlock如果[somveViewModel].SomeVar.SomeSubVar.Name属性为null。它不会影响[somveViewModel].SomeVar.SomeSubVar.Name财产的价值。它有效地建立了 null 和TargetNullValue属性值之间的等价关系。

See this questionfor a good explanation.

请参阅此问题以获得很好的解释。

So my advice is if you want to have a non-null default value, you need to set it in the view model.

所以我的建议是如果你想要一个非空的默认值,你需要在视图模型中设置它。