Мне очень нужна идея;MVVM: переплетные конвертеры с сильно типизированным DataContext
Это то, что меня беспокоит:
Я один вид, названный «DropDownView» Это, как я использую его:
<control:DropDownView DataContext="{Binding StronglyTypedViewModel}"/>
Значение, что в родительской странице ViewModel, у меня есть свойство типа: StronglyTypedViewModel<T>
Теперь, когда представлен вид, все это работает отлично, как я ожидаю;
Однако эти несколько строк из DropDownView являются тревожным поведением:
<ctrl:CustomDropDown x:Name="cc"
ItemsSource="{Binding ControlData}"
ItemTemplate="{Binding ControlItemTemplate}"
SelectedItem="{Binding ControlSelectedItem, ConverterParameter={Binding ControlData}, Converter={Binding}, Mode=TwoWay}"
...
С набором свойств SelectedItem конвертера, я получаю исключение во время выполнения: Ошибка в связывании ... Без него я могу видеть выпадающие значения заполнены, как ожидалось (пользовательский ItemTemplate привязан), но представлен как object.ToString()
!
Я сильно типизированных ViewModel, то есть я должен был сильно типизированных конвертер, который объявлен в ViewModel, как:
public class SMOEntityProcessingViewModel<T> : CustomViewModelBase, IValueConverter
...
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
Но, так как я не знаю, тип ViewModel во время компиляции я не могу добавить StaticResource для ViewModel, которые могут быть использованы для Convertor ...
Любая помощь приветствуется ... Спасибо
@devdigital
ObservableCollection<T> ControlData;
object ControlSelectedItem;
ControlItemTemplate = Helpers.XAML.Methods.GenerateDataTemplate("{Binding Path=" + _propertyToShow + "}");
---------generating this in VM constructor, _propertyToShow depends on the T
т.е.
"<DataTemplate ");
"xmlns='http://schemas.microsoft.com/winfx/"
"2006/xaml/presentation' "
"xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' >"
"<TextBlock Text='" + _propertyToShow + "' />"
"</DataTemplate>"
Я не знаю, как создать конвертер еще, так что все еще продолжается ...
Пожалуйста, дайте мне знать, если вам нужно более подробно, или, возможно, я мог бы отправить небольшую демо-почту по почте ... Большое спасибо за интерес ...
Базовый элемент управления - AutoCompleteBox; Если ValueMemberPath привязан-> runtime ex .; Если ValueMemberBinding вместо-> приложение зависает; Разделенный конвертер должен каким-то образом узнать, что такое входящий тип и какое свойство преобразовать ... Должен ли я рассмотреть возможность передачи параметров (dependencyproperty) в DropDownView и связать их в конвертере? – dvox
Трудно сказать, не видя еще кода. Каковы типы ControlData и ControlSelectedItem, и как выглядит ControlItemTemplate? Если вы создадите отдельный конвертер и разместите полный обновленный код, который будет полезен. – devdigital