0

我非常需要一个想法;

这是困扰我的:

我有一个视图,名为“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 Converter 属性集,我得到运行时异常:绑定错误...没有它,我可以看到按预期填充的下拉值(自定义 ItemTemplate 已绑定),但是显示为object.ToString()

我有强类型的 ViewModel,这意味着我应该有强类型的 Converter,它在 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 的类型,所以我无法为 ViewModel 添加一个可以用于转换器的 StaticResource ...

任何帮助表示赞赏...谢谢

@devdigital

ObservableCollection<T> ControlData;
object ControlSelectedItem;
ControlItemTemplate = Helpers.XAML.Methods.GenerateDataTemplate("{Binding Path=" + _propertyToShow + "}");
---------generating this in VM constructor, _propertyToShow depends on the T

IE

"<DataTemplate ");
"xmlns='http://schemas.microsoft.com/winfx/"
"2006/xaml/presentation' "
"xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' >"
"<TextBlock Text='" + _propertyToShow + "' />"
"</DataTemplate>"

我还不知道如何创建转换器,所以仍在进行中...

如果您需要更多详细信息,请告诉我,或者我可以通过邮件发送一些小演示......非常感谢您的兴趣......

4

1 回答 1

0

您的视图模型应该只负责相关视图的表示逻辑。将转换器代码分离为新类型,然后您可以将其添加为适当的资源。此外,假设您的 CustomDropDown 类型派生自 ItemsControl,您可以使用 DisplayMemberPath 属性来设置在显示中使用基础数据绑定对象的哪个属性,或者如果您需要更多格式控制,您可以设置 ItemTemplate 属性。

于 2010-12-29T15:19:25.137 回答