Windows手机中的多值转换器
我有一个Windows Phone应用程序。
让我们说我有一个CustomersViewModel类来公开客户列表。 我在xaml中有一个绑定到该列表的列表:
因此,列表框中的每个项目都将绑定到单个客户对象。
CustomersViewModel还有一个属性
string StoreId
在我上面的XAML中,我想将StoreId传递给转换器,以及我已经传递的客户对象。 怎么能优雅地做到这一点?
在WP8上似乎不存在IMultiValueConverter,并且不可能对转换器的ConverterParameter进行数据绑定。
这篇博客文章解释了解决问题的方法。 我们的想法是在转换器上创建依赖项属性 。 然后,您可以将StoreId
绑定到此,而不是使用ConverterParameter
。
所以在你的UserIdToNameConverter
,你需要从DependencyObject
inheritance,并添加依赖属性:
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。