将值传递给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(); } } 

您不能将多个值传递给“常规”值转换器。 您可以使用IMul​​tiValueConverter并将绑定定义为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 )。 然后,您将可以访问转换器中的KeyValue