gpt4 book ai didi

wpf - 等效。到 XAML 绑定(bind)中的 Coalesce()?

转载 作者:行者123 更新时间:2023-12-04 13:34:26 27 4
gpt4 key购买 nike

在 SQL 中,我可以这样做:

Select Coalesce(Property1, Property2, Property3, 'All Null') as Value
From MyTable

如果 Property1、2 和 3 都为空,那么我会得到 'All Null'

如何在 XAML 中执行此操作?我尝试了以下方法,但没有运气:
<Window.Resources>
<local:Item x:Key="MyData"
Property1="{x:Null}"
Property2="{x:Null}"
Property3="Hello World" />
</Window.Resources>

<TextBlock DataContext="{StaticResource MyData}">
<TextBlock.Text>
<PriorityBinding TargetNullValue="All Null">
<Binding Path="Property1" />
<Binding Path="Property2" />
<Binding Path="Property3" />
</PriorityBinding>
</TextBlock.Text>
</TextBlock>

结果应该是“Hello World”,但它是“All Null”

我希望我的问题很清楚。

最佳答案

您必须构建一个自定义 IMultiValueConverter为此并使用 MultiBinding。 PriorityBinding使用集合中成功生成值的第一个绑定(bind)。在您的情况下, Property1 绑定(bind)立即解析,因此使用它。由于 Property1 为空,因此使用 TargetNullValue。

像这样的转换器:

public class CoalesceConverter : System.Windows.Data.IMultiValueConverter
{
public object Convert(object[] values, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
if (values == null)
return null;
foreach (var item in values)
if (item != null)
return item;
return null;
}

public object[] ConvertBack(object value, Type[] targetTypes,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}

像这样的MultiBinding:
<Window.Resources>
<local:Item x:Key="MyData"
Property1="{x:Null}"
Property2="{x:Null}"
Property3="Hello World" />
<local:CoalesceConverter x:Key="MyConverter" />
</Window.Resources>

<TextBlock DataContext="{StaticResource MyData}">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource MyConverter}">
<Binding Path="Property1" />
<Binding Path="Property2" />
<Binding Path="Property3" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>

关于wpf - 等效。到 XAML 绑定(bind)中的 Coalesce()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6947728/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com