gpt4 book ai didi

c# - 使用绑定(bind)作为 ConverterParameter

转载 作者:太空狗 更新时间:2023-10-29 19:58:15 24 4
gpt4 key购买 nike

我正在尝试使用值绑定(bind)作为转换器参数,如下面的代码片段所示:

<Element
Attribute="{Binding Value,
Converter={StaticResource EqualityConverter},
ConverterParameter={Binding CompareTo}}" />

问题是,EqualityConverter::Convert() 方法是使用 Binding 实例作为转换器参数 (CompareTo) 调用的而不是绑定(bind)的具体值。

有没有更聪明的方法来解决它?我显然可以在我的 View 模型中提供转换后的属性,但我想知道是否有与上述解决方案类似的工作解决方案。

最佳答案

另一种可能更简单的方法是在转换器本身上定义一个可绑定(bind)属性。

public class CompareConverter: IValueConverter, INotifyPropertyChanged{
private ComparisonType _comparison = ComparisonType.Equals;
public ComparisonType Comparison {
get {return _comparison; }
set { _comparison = value; OnPropertyChanged(); }
}

private string _compareTo = null;
public string CompareTo {
get {return _compareTo; }
set { _compareTo = value; OnPropertyChanged(); }
}

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}

public object Convert (object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
bool result = false;
switch (Comparison)...
return result;
}
...
}

您还可以通过继承 BindableObject 并实现可绑定(bind)属性来实现这一点,如果绑定(bind)上下文未携带到资源中,您可能需要这样做。如果是这种情况,您可以在调用 Initialize 方法后,在构造函数中从代码隐藏一次设置它。

您的 xaml 将如下所示:

..
<ResourceDictionary>
<myPrefix:CompareConverter x:Key="compareToY" Comparison="Equals" CompareTo="{Binding... }"/>
</ResourceDictionary>
...
<Control Value="{Binding X, Converter={StaticResource compareToY}}"/>

可能需要一些调整,结果应该比多重绑定(bind)更清晰

关于c# - 使用绑定(bind)作为 ConverterParameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29820639/

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