我得到了一个非常奇怪的XamlParseException,我不知道为什么。
该消息为“无法设置未知成员'{clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro}View.Model'.”“。
在视图模型中,我有一个在构造函数中初始化的ObservableCollection,如下所示:
internal class EntityListScreenViewModel : Screen
{
public EntityListScreenViewModel()
{
var list = new List<Entity>() { new Entity() { Name = "Joe" } };
this.Entities = new ObservableCollection<Entity>(list);
}
public ObservableCollection<Entity> Entities { get; set; }
}以下是您的看法:
<Window x:Class="WpfApp.EntityListScreenView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="350" Width="525">
<Grid>
<ListBox x:Name="Entities"/>
</Grid>
</Window>当我在一个EntityListScreenViewModel实例上调用EntityListScreenViewModel()时,就会得到异常。
如果我不向列表中添加一个实体(而不是使用var list = new List<Entity>(); ),我就不会得到异常。
有人有什么想法吗?
更新:
我尝试将ObservableCollection更改为string类型,并添加了一个字符串,但没有得到异常。我怀疑Caliburn.Micro正在寻找一个视图来表示ListBox中的实体。这可能就是发生了什么吗?
更新2:
我终于弄明白到底是怎么回事.DefaultItemTemplate在ConventionManager中有一些解析的Xaml,它正在寻找"Caliburn.Micro“程序集,但我已经将代码与另一个程序集放在了一起。改变了Xaml,问题就消失了。
发布于 2011-05-16 06:18:57
我怀疑Caliburn.Micro正在寻找一个视图来表示ListBox中的实体
是的,这就是正在发生的事情。默认情况下,使用名称约定绑定列表时,杯标微将此解释为绑定到ViewModels列表,而不是实体列表。这使您可以绑定到ViewModels列表,而无需指定要在ItemTemplate of ItemsControl中使用的特定视图,最终得到的是特定于该ViewModel的视图列表。
为了确保这种情况不会发生,您应该能够手动绑定到ListBox。如果卡利伯恩微已经看到ItemsSource绑定,它将忽略该约定。
<ListBox x:Name="Entities" ItemsSource="{Binding Entities}"/>发布于 2011-05-16 06:46:32
我不确定,但是您可以尝试将EntityListScreenView放在Views名称空间中,EntityListScreenViewModel放在ViewModels名称空间中-当然,如果您使用“标准”Bootstrapper类的话。
https://stackoverflow.com/questions/6003517
复制相似问题