2013-11-26 39 views
4

我有一個windows phone應用程序。windows phone中的多值轉換器

可以說我有一個CustomersViewModel類,它公開了客戶列表。我有一個xaml列表綁定到該列表:

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

因此,列表框中的每個項目都將綁定到單個客戶對象。

CustomersViewModel還有一個附加屬性

string StoreId 

在我的XAML從上面,我想給STOREID傳遞到轉換器中,除了我已經通過客戶對象。這如何優雅地完成?

看來IMultiValueConverter在WP8上不存在,並且不可能將數據綁定到轉換器的ConverterParameter。

回答

2

blog post解釋瞭解決問題的方法。這個想法是在你的轉換器上創建一個dependency property。然後,您可以將您的StoreId綁定到此,而不是使用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; 
    } 
} 

然後,您可以綁定到視圖的資源範圍內這種相關性屬性:

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

這假設您的視圖的DataContext設置爲CustomersViewModel,它可以找到StoreId屬性。然後,您可以按照您在問題中所用的相同方式使用轉換器。

請注意,如果您在ItemTemplate而不是Resources內部創建轉換器,它將不起作用。查看博客文章以獲取更多信息。所有功勞都歸功於博客的作者Sebastien Pertus。

+0

糾正我,如果我錯了,但這種方法的問題似乎是你只能真正傳遞頁面上定義的額外參數。所以我無法將多個值傳遞給LLS或Listbox中綁定的項目。 – Poken1151

+0

我不確定我完全理解你的問題。如果你想綁定別的東西,如果你需要傳遞多個參數,你可以在轉換器上添加另一個依賴屬性。或者你的意思是綁定ListBox中的項目的轉換器參數?是的,這在這裏沒有什麼幫助,因爲轉換器需要在ListBox的ItemTempalte之外聲明。 –

+0

是的,這是我所指的列表框中的項目,其原因與您描述的原因完全相同。 – Poken1151

相關問題