- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我问是因为它似乎不起作用。
假设我们绑定(bind)到以下对象:
public class HurrDurr
{
public string Hurr {get{return null;}}
public string Durr {get{return null;}}
}
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} to the {1}"
FallbackValue="Not set! It works as expected!)">
<Binding Path="Hurr"/>
<Binding Path="Durr"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
DependencyProperty.UnsetValue
不起作用:
<TextBlock xmnlns:base="clr-namespace:System.Windows;assembly=WindowsBase">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} to the {1}"
FallbackValue="Not set! It works as expected!)">
<Binding Path="Hurr"
FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" />
<Binding Path="Durr"
FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
class MultiValueFailConverter : IMultiValueConverter
{
public object Convert(
object[] values,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
if (values == null ||
values.Length != 2 ||
values.Any(x=>x == null))
return System.Windows.DependencyProperty.UnsetValue;
return values;
}
public object[] ConvertBack(
object value,
Type[] targetTypes,
object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException("Too complex hurt brain.");
}
}
最佳答案
这是一个老问题,但它可以使用一些解释。
来自 FallbackValue documentation :
A binding returns a value successfully if:
- The path to the binding source resolves successfully.
- The value converter, if any, is able to convert the resulting value.
- The resulting value is valid for the binding target (target) property.
If 1 and 2 return DependencyProperty.UnsetValue, the target property is set to the value of the FallbackValue, if one is available. If there is no FallbackValue, the default value of the target property is used.
Hurr
和
Durr
特性。 Null 是字符串的有效值,这意味着绑定(bind)有效。
<TextBlock>
<TextBlock.Text>
<MultiBinding FallbackValue="Binding is valid. I will never be seen." StringFormat="{}{0} to the {1}">
<Binding Path="Hurr" />
<Binding Path="Durr" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock>
<TextBlock.Text>
<MultiBinding FallbackValue="Binding paths are invalid. Look at me." StringFormat="{}{0} to the {1}">
<Binding Path="xHurr" />
<Binding Path="xDurr" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock>
<TextBlock.Text>
<MultiBinding FallbackValue="One binding path is invalid. Look at me." StringFormat="{}{0} to the {1}">
<Binding Path="xHurr" />
<Binding Path="Durr" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Binding
的 FallbackValue
MultiBinding
的属性parent 应该引用用于 MultiBinding 的目标属性的 FallbackValue,而不是子 Bindings。
<TextBlock xmlns:base="clr-namespace:System.Windows;assembly=WindowsBase">
<TextBlock.Text>
<MultiBinding FallbackValue="Binding is valid. I will never be seen." StringFormat="{}{0} to the {1}">
<Binding FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" Path="Hurr" />
<Binding FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" Path="Durr" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Binding
中没有提供路径,绑定(bind)仍然有效属性,因为绑定(bind)将使用它绑定(bind)到的任何对象。
<TextBlock xmlns:base="clr-namespace:System.Windows;assembly=WindowsBase">
<TextBlock.Text>
<MultiBinding FallbackValue="Binding is still valid. I will never be seen." StringFormat="{}{0} to the {1}">
<Binding FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" />
<Binding FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
internal class ForceUnsetValueConverter : IValueConverter
{
#region Implementation of IValueConverter
public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
{
return DependencyProperty.UnsetValue;
}
public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
{
throw new NotImplementedException();
}
#endregion
}
<TextBlock>
<TextBlock.Text>
<MultiBinding FallbackValue="Binding is valid, but look at me. I'm an UnsetValue." StringFormat="{}{0} to the {1}">
<Binding Converter="{StaticResource ForceUnset}" Path="Hurr" />
<Binding Path="Durr" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
关于wpf - FallbackValue 如何与 MultiBinding 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668987/
我问是因为它似乎不起作用。 假设我们绑定(bind)到以下对象: public class HurrDurr { public string Hurr {get{return null;}}
有没有办法将另一个绑定(bind)作为后备值? 我正在尝试做这样的事情: 如果有人有另一个技巧来实现它,那就太好了。 最佳答案 您正在寻找的是称为 PriorityBinding 的东西(this
是否有任何变通方法来模拟 WinRT 中的 Binding.FallbackValue 行为? 最佳答案 这可以通过附加属性来完成。我发现使用它们可以解决 WinRT 的许多限制。 我没有代码,但是这
我正在尝试设置 FallbackValue 以防无法调用我的转换器,但我不确定该怎么做。 转换器中外部图像的路径看起来像这样,当 LatestPosition!=null 图像以正确的方式设置。 p
我正在寻找一种方法来将 UI 元素绑定(bind)到复杂类型,并将另一种复杂类型作为 FallBackValue。不幸的是,我没有找到关于该主题的任何内容。当我将 FallBackValue 设置为属
考虑以下代码: .... .... 现在,设置 FallBackvalue 的语法是什么?关于绑定(bind)? 我已经尝试了一些不同的选项,但似乎找不到正确的语法: Margin="{
我的 View 模型公开了一个名为 MyList 的列表,该列表可能为空或 null。我有一个要基于此状态隐藏的元素。如果 MyList 为空或 null,则应折叠该元素。如果它有元素,那么它应该被显
我有一个涉及大量代码的问题,但我已将其隔离。如果你想要一个 TL;DR;跳到更远的地方。如果您想了解一些背景信息,这是我的情况: 我已经为我的绑定(bind)创建了三个数据转换器。其中之一是“字符串前
在没有 DataContext 的 Page 上,永远不会评估回退值,从而导致显示空白的 TextBlock。 例如: 或 而下面的 Binding,也带有 null DataContext *确
我是一名优秀的程序员,十分优秀!