vig*_*ity 2 wpf xaml observablecollection static-resource
我想添加一个已在 XAML 中实例化一次的单个模型对象,并将其添加到两个不同的集合(在 xaml 中)。
以下代码在 Blend 的设计时呈现良好,但在运行时出现以下错误:
对于“
WpfBlog.Models.Tag”类型的“Post1”对象,无法转换为“System.Collections.ObjectModel.ObservableCollection`1[WpfBlog.Models.Tag]”类型。标记文件 'WpfBlog;component/Admin.xaml' 行 XX 位置 YY 中的对象 'WpfBlog.Admin' 处出错。
如果我注释掉“Post1”,我将在“Post2”上收到此错误
无法将元素添加到属性“Tags”,因为如果该属性使用显式集合标记,它只能有一个子元素。标记文件“WpfBlog;component/Admin.xaml”行 AA 位置 BB 中的对象“System.Windows.StaticResourceExtension”处出错。
<Window.Resources>
<model:Tag x:Key="TDD" Name="TDD" ForeColor="Black" BackColor="White" />
<model:Tag x:Key="Agile" Name="Agile" ForeColor="White" BackColor="Black" />
<model:Tag x:Key="Waterfail" Name="Waterfail" ForeColor="Red" BackColor="White" />
</Window.Resources>
<Window.DataContext>
<local:AdminViewModel>
<local:AdminViewModel.AllTags>
<StaticResource ResourceKey="TDD"/>
<StaticResource ResourceKey="Agile"/>
<StaticResource ResourceKey="Waterfail"/>
</local:AdminViewModel.AllTags>
<local:AdminViewModel.Posts>
<local:PostViewModel Title="Post1">
<local:PostViewModel.Tags>
<StaticResource ResourceKey="TDD" />
</local:PostViewModel.Tags>
</local:PostViewModel>
<local:PostViewModel Title="Post2">
<local:PostViewModel.Tags>
<StaticResource ResourceKey="TDD" />
<StaticResource ResourceKey="Agile" />
<StaticResource ResourceKey="Waterfail" />
</local:PostViewModel.Tags>
</local:PostViewModel>
</local:AdminViewModel.Posts>
</local:AdminViewModel>
<Window.DataContext>
Run Code Online (Sandbox Code Playgroud)
以下代码编译并运行良好,但创建了两个名为“TDD”的标签,因此如果我尝试重命名该标签,我必须为所有帖子执行此操作,而不仅仅是一个 Tag 对象。
<Window.Resources>
<model:Tag x:Key="TDD" Name="TDD" ForeColor="Black" BackColor="White" />
<model:Tag x:Key="Agile" Name="Agile" ForeColor="White" BackColor="Black" />
<model:Tag x:Key="Waterfail" Name="Waterfail" ForeColor="Red" BackColor="White" />
</Window.Resources>
<Window.DataContext>
<local:AdminViewModel>
<local:AdminViewModel.AllTags>
<StaticResource ResourceKey="TDD"/>
<StaticResource ResourceKey="Agile"/>
<StaticResource ResourceKey="Waterfail"/>
</local:AdminViewModel.AllTags>
<local:AdminViewModel.Posts>
<local:PostViewModel Title="Post1">
<local:PostViewModel.Tags>
<model:Tag Name="TDD" ForeColor="Black" BackColor="White" />
</local:PostViewModel.Tags>
</local:PostViewModel>
<local:PostViewModel Title="Post2">
<local:PostViewModel.Tags>
<model:Tag Name="TDD" ForeColor="Black" BackColor="White" />
<model:Tag Name="Agile" ForeColor="White" BackColor="Black" />
<model:Tag Name="Waterfail" ForeColor="Red" BackColor="White" />
</local:PostViewModel.Tags>
</local:PostViewModel>
</local:AdminViewModel.Posts>
</local:AdminViewModel>
<Window.DataContext>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?如果 Blend 没有正确渲染它,我可以忽略它并解决它,但它确实如此!
我能够通过在 Tags 属性中显式初始化一个新集合来避免这个问题。像这样的东西:
<local:PostViewModel Title="Post1">
<local:PostViewModel.Tags>
<model:TagCollection>
<StaticResource ResourceKey="TDD" />
</model:TagCollection>
</local:PostViewModel.Tags>
Run Code Online (Sandbox Code Playgroud)
显然,这只有在您允许您的标签属性可写时才有可能。
| 归档时间: |
|
| 查看次数: |
5143 次 |
| 最近记录: |