如果某个视图模型实例包含属于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
,我会在设计器中看到我的三个设计数据过程。
答案 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,但你可以试一试。也许它会起作用。