gpt4 book ai didi

c# - 构建复杂的条件绑定(bind)的最佳方式

转载 作者:行者123 更新时间:2023-11-30 20:30:28 25 4
gpt4 key购买 nike

考虑我必须根据两个属性设置样式:

<Label Style={Binding IsEnabled, Convert={x:Static IsEnabledToStyleConverter}} />

<Label Style={Binding IsRequired, Convert={x:Static IsEnabledToStyleConverter}} />

确定是否使用与 IsEnabledIsRequired 的绑定(bind)是另一个属性 - UseRequried。如何在 UseRequired 上的这两个绑定(bind)盆地之间进行选择?

我尝试过的方法:

  1. 另一个值(value)转换器

我已经创建了自己的值转换器:

public class ControlToLableStleConverter: IValueConverter
{
public object Convert(object value..)
{
var myCtrl = (MyControl) value;
if (myCtrl.UseRequired)
//return style based on IsRequired property
else
//return style based on IsEnabled property
}
}

但问题是样式在 IsEnabledIsRequired 更改时没有更改。很明显,所以这个解决方案已经出来了。

  1. 数据触发器

我还创建了 DataTriggers:

<Label>
<Label.Triggers>
<DataTrigger Binding="{Binding UseRequired}" Value="True">
<Setters>
<Setter Property="Style" Value="{Binding IsRequired ....">
</Setters>
</DataTrigger>
<DataTrigger Binding="{Binding UseRequired}" Value="False">
<Setters>
<Setter Property="Style" Value="{Binding IsEnabled ....">
</Setters>
</DataTrigger>
</Label.Triggers>
</Label>

但是 Label.Triggers 只能包含 EventTrigger 元素。我还能做什么?

最佳答案

在这种情况下,您可以使用 MultiBinding,尽管它可能非常冗长:

<Label>
<Label.Style>
<MultiBinding Converter="{StaticResource yourConverter}">
<Binding Path="IsEnabled" />
<Binding Path="IsRequired" />
</MultiBinding>
</Label.Style>
</Label>

然后转换器是:

public class StyleConverter : IMultiValueConverter {
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) {
// take some caution here, because values can be null or DependencyProperty.UnsetValue in certain cases
var enabled = (bool) values[0];
var required = (bool) values[1];
// choose style
}

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

关于c# - 构建复杂的条件绑定(bind)的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44702376/

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