Windows手机中的多值转换器

我有一个Windows Phone应用程序。

让我们说我有一个CustomersViewModel类来公开客户列表。 我在xaml中有一个绑定到该列表的列表:

         

因此,列表框中的每个项目都将绑定到单个客户对象。

CustomersViewModel还有一个属性

 string StoreId 

在我上面的XAML中,我想将StoreId传递给转换器,以及我已经传递的客户对象。 怎么能优雅地做到这一点?

在WP8上似乎不存在IMultiValueConverter,并且不可能对转换器的ConverterParameter进行数据绑定。

这篇博客文章解释了解决问题的方法。 我们的想法是在转换器上创建依赖项属性 。 然后,您可以将StoreId绑定到此,而不是使用ConverterParameter

所以在你的UserIdToNameConverter ,你需要从DependencyObjectinheritance,并添加依赖属性:

 public class UserIdToNameConverter : DependencyObject, IValueConverter { public string StoreId { get { return (string) GetValue(StoreIdProperty); } set { SetValue(StoreIdProperty, value); } } public static readonly DependencyProperty StoreIdProperty = DependencyProperty.Register("StoreId", typeof (string), typeof (UserIdToNameConverter), new PropertyMetadata(string.Empty)); public object Convert(object value, Type targetType, object parameter, string language) { //Your current code //Can now use StoreId instead of ConverterParameter } public object ConvertBack(object value, Type targetType, object parameter, string language) { //Same as above; } } 

然后,您可以在视图的资源中绑定到此依赖项属性:

    

这假设您的视图的DataContext设置为CustomersViewModel ,它可以在其中找到StoreId属性。 然后,您可以使用与问题相同的方式使用转换器。

作为旁注,如果在ItemTemplate而不是在Resources内部创建转换器,它将无法工作。 有关更多信息,请参阅博客文章。 所有功劳归功于博客作者Sebastien Pertus。