public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
string parameterString = parameter as string;
if (!string.IsNullOrEmpty(parameterString))
{
string[] parameters = parameterString.Split(new char[]{'|'});
// Now do something with the parameters
}
}
public class MyMultiValueConverter : IMultiValueConverter {
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
int firstValue = (int)values[0];
double secondValue = (double)values[1];
string thirdValue = (string)values[2];
return "You said " + thirdValue + ", but it's rather " + firstValue * secondValue;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) {
throw new NotImplementedException("Going back to what you had isn't supported.");
}
}
public class ExampleConverter : DependencyObject, IValueConverter
{
public string Example
{
get => GetValue(ExampleProperty).ToString();
set => SetValue(ExampleProperty, value);
}
public static readonly DependencyProperty ExampleProperty =
DependencyProperty.Register("Example", typeof(string), typeof(ExampleConverter), new PropertyMetadata(null));
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//Do the convert
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
8条答案
按热度按时间xkftehaa1#
转换器总是实现IValueConverter。这意味着对Convert或ConvertBack的调用传递单个附加参数。该参数从XAML提取。
正如HiteshPatel所建议的,没有什么可以阻止您将多个值放入参数中,只要您有一个分隔符来分隔它们,但是您不能使用逗号作为XAML的分隔符!
例如:
XAML语言
转换器
对于最简单的
Split
版本,.Net的更高版本不需要字符数组,因此您可以使用以下字符数组:附录:
几年前,eBay在URL中使用的一个技巧是用QQ分隔URL中的数据。双Q不会自然出现在文本数据中。如果你遇到了避免编码问题的文本分隔符,就使用QQ......虽然这不适用于分割(需要单个字符,但很高兴知道):)
vc9ivgsu2#
虽然上述答案可能是可行的,但它们似乎过于复杂。只需在XAML代码中将
IMultiValueConverter
与适当的MultiBinding
一起使用。假设ViewModel具有属性FirstValue
、SecondValue
和ThirdValue
,它们分别为int
、double
和string
,有效的multi转换器可能如下所示:C#
XAML语言
由于它既不需要摸索
MarkupExtension
所需的ProvideValue
方法,也不需要在 *(!)a转换器中指定DependencyObject
*,因此我相信这是最优雅的解决方案。puruo6ea3#
您可以从
DependecyObject
类派生并添加任意多个DependencyProperty
对象。例如:ExampleConverter.cs
然后在XAML中:
ExampleView.xaml
5gfr0r5j4#
这可以通过使用
System.Windows.Markup.MarkupExtension
(docs)来完成。这将允许您向转换器传递值,这些值可以用作参数或返回值,例如:
用法:
确保在
.xaml
中引用转换器的命名空间。o3imoua45#
与凯尔Olson的回答类似,您可以使用以下专门的集合:
XAML文件:
转换器:
有几种专用集合类型可以满足大多数需要。
olhwl3o26#
如果您的输入不适用于字符串,并且您有多个参数(不是绑定),则可以只传递一个集合。定义一个所需类型的集合,以避免某些UI编辑器数组问题:
然后使用集合添加XAML
然后将结果强制转换为转换器中适当类型的数组:
p5fdfcr17#
Xamarin溶液:
XAML消耗:
wztqucjr8#
除了Jeff的答案.你还可以传递不同的参数类型.