如何在xaml中填充ReadOnlyObservableCollection

时间:2018-04-13 21:53:36

标签: c# wpf xaml

如果某个视图模型实例包含属于ReadOnlyObservableCollection类型的属性,是否可以在xaml中将其定义为设计数据?

当我使用这个

<viewModels:ProcedureEditorViewModel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                                 xmlns:viewModels="clr-namespace:ExampleUser.GUI.ViewModels">
    <viewModels:ProcedureEditorViewModel.Procedures>
        <viewModels:ProcedureViewModel Name="Procedure A" />
        <viewModels:ProcedureViewModel Name="Procedure B" />
        <viewModels:ProcedureViewModel Name="Procedure C" />
    </viewModels:ProcedureEditorViewModel.Procedures>
</viewModels:ProcedureEditorViewModel>

作为设计数据,设计器中的程序列表为空。 如果我将Procedures的类型从ReadOnlyObservableCollection更改为ObservableCollection甚至IEnumerable,我会在设计器中看到我的三个设计数据过程。

1 个答案:

答案 0 :(得分:1)

绝对可行的方法是编写自己的某种标记扩展名。
当你这样做时,你可能会觉得只是编写代码来做到这一点更容易 或者只使用常规的observablecollection。

XAML使用无参数构造函数。他们从未完全设法完全实现xaml2009和x:TypeArguments。当您阅读文档时,您会认为“这将会起作用”,然后您会发现它只能在“松散”未编译的xaml中工作https://docs.microsoft.com/en-us/dotnet/framework/xaml-services/generics-in-xaml

您实际上可以合并未编译的资源字典。 https://social.technet.microsoft.com/wiki/contents/articles/28797.wpf-dynamic-xaml.aspx#Loading_a_Flat_File_as_a_Resource_Dictionary
  我从来没有尝试过x:TypeArguments,但你可以试一试。也许它会起作用。