這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。
糾正我,如果我錯了,但這種方法的問題似乎是你只能真正傳遞頁面上定義的額外參數。所以我無法將多個值傳遞給LLS或Listbox中綁定的項目。 – Poken1151
我不確定我完全理解你的問題。如果你想綁定別的東西,如果你需要傳遞多個參數,你可以在轉換器上添加另一個依賴屬性。或者你的意思是綁定ListBox中的項目的轉換器參數?是的,這在這裏沒有什麼幫助,因爲轉換器需要在ListBox的ItemTempalte之外聲明。 –
是的,這是我所指的列表框中的項目,其原因與您描述的原因完全相同。 – Poken1151