gpt4 book ai didi

c# - Windows Phone 中的多值转换器

转载 作者:行者123 更新时间:2023-11-30 12:28:54 46 4
gpt4 key购买 nike

我有一个 Windows Phone 应用程序。

假设我有一个公开客户列表的 CustomersViewModel 类。我在绑定(bind)到该列表的 xaml 中有一个列表:

<ListBox ItemsSource="{Binding Path=Data}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Text="{Binding Converter={StaticResource userIdToNameConverter}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

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

CustomersViewModel 有一个额外的属性

string StoreId

在上面的 XAML 中,除了我已经传递的客户对象之外,我还想将 StoreId 传递给转换器。如何优雅地做到这一点?

WP8 上似乎不存在 IMultiValueConverter,并且无法对转换器的 ConverterParameter 进行数据绑定(bind)。

最佳答案

blog post解释了解决该问题的方法。这个想法是创建一个 dependency property在你的转换器上。然后,您可以将 StoreId 绑定(bind)到此,而不是使用 ConverterParameter

所以在你的UserIdToNameConverter上,你需要继承DependencyObject,并添加依赖属性:

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;
}
}

然后您可以在 View 的资源中绑定(bind)到此依赖属性:

<UserControl.Resources>
<UserIdToNameConverter x:Key="UserIdToNameConverter" StoreId="{Binding StoreId}"/>
</UserControl.Resources>

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

附带说明一下,如果您在 ItemTemplate 而不是在 Resources 中创建转换器,它将不起作用。有关详细信息,请参阅博客文章。所有功劳归于博客作者 Sebastien Pertus。

关于c# - Windows Phone 中的多值转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20229214/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com