将值传递给IValueConverter
我有一个ListView
,它有一个包含两列和多行的Grid
。 每行在每列中都有一个TextBlock
,每个Text
属性绑定到ListView的ItemSource
的值。 我需要根据第一个TextBlock
的值对第二个TextBlock
中的文本进行一些转换。 如何将第一个文本框的值输入转换器?
这是我到目前为止:
XAML:
ValueStringConverter
代码:
public class ValueStringConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string name = (string)value; name = name.Replace("$$", " "); name = name.Replace("*", ", "); name = name.Replace("##", ", "); return value; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
您不能将多个值传递给“常规”值转换器。 您可以使用IMultiValueConverter并将绑定定义为MultiBinding 。
或者,您可以创建一个IValueConverter,它接受DataContext中的整个对象,将对象强制转换为其类型,获取Value和Key并返回所需的字符串。
在第二个文本块上将绑定定义为
你的转换器为:
public class ValueStringConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { MyDataContextObjectType obj= (MyDataContextObjectType)value; var name= obj.Name; var key = obj.Key; //here you have both Name and Key, build your string and return it //if you don't know the type of object in the DataContext, you could get the Key and Name with reflection name = name.Replace("$$", " "); name = name.Replace("*", ", "); name = name.Replace("##", ", "); return value; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
尝试多重绑定。 你需要一个IMultiValueConverter
:
public class MultiValueConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { var key = (string)values[0]; var value = (string)values[1]; // replace with appropriate logic var result = key + ": " + value; return result; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
并稍加修改XAML:
绑定到实例,而不是属性(在这种情况下为value
)。 然后,您将可以访问转换器中的Key
和Value
。