我目前正在研究CustomConverter
WPF。这就像一个通用转换。
阅读此博客,找到了一种简化 xaml 的方法。
所以转换器看起来像这样:
public CustomConverter : MarkupExtension, IMultiValueConverter {
public ParametersCollection Parameters { get; set; }
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
if(Parameters == null)
return Binding.DoNothing;
//Convertion Logic
//...
}
public override object ProvideValue(IServiceProvider serviceProvider) {
return new CustomConverter();
}
}
public class ParametersCollection : ObservableCollection<object> {
}
在我的 Xaml 文件中,有以下内容:
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:primitives="clr-namespace:System;assembly=mscorlib"
xmlns:converter="clr-namespace:NS.Converters">
<Label>
<Label.Visibility>
<MultiBinding>
<converter:CustomConverter>
<converter:CustomConverter.Parameters>
<converter:ParametersCollection>
<primitives:String>Param1</primitives:String>
...
</converter:ParametersCollection>
</converter:CustomConverter.Parameters>
</converter:CustomConverter>
</MultiBinding>
<!--Bindings start here -->
</Label.Visibility>
</Label>
</UserControl>
因此,在调试代码时,该Parameters
属性为空(null),因此 xaml 不会填充集合。所以我的问题是,如何仅使用 xaml 而不使用 C# 代码来填充参数。