2

我得到一个非常奇怪的 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 实例上调用 WindowManager.ShowWindow() 时,我得到了异常。

如果我没有将实体添加到列表中(var list = new List<Entity>();改为使用),则不会出现异常。

有人有什么想法吗?

更新:

我尝试将 ObservableCollection 更改为字符串类型并添加了一个字符串,但我没有收到异常。我的怀疑是 Caliburn.Micro 正在以某种方式寻找一个视图来表示 ListBox 中的实体。这可能是怎么回事?

更新 2:

我终于弄清楚到底发生了什么...... ConventionManager 中的 DefaultItemTemplate 有一些解析的 Xaml 正在寻找“Caliburn.Micro”程序集,但我已将代码与另一个程序集一起放入。更改了 Xaml,问题就消失了。

4

2 回答 2

0

我的怀疑是 Caliburn.Micro 正在以某种方式寻找一个视图来表示 ListBox 中的实体

是的,这就是正在发生的事情。默认情况下,当您使用名称约定绑定列表时,Caliburn Micro 会将其解释为您绑定到 ViewModel 列表;不是实体列表。这允许您绑定到 ViewModel 列表,而无需指定要在其中使用的特定视图,ItemTemplate并且ItemsControl您最终得到的是特定于该 ViewModel 的视图列表。

为确保不会发生这种情况,您应该能够手动绑定到 ListBox。如果 Caliburn Micro 已经看到 ItemsSource 绑定,它将忽略该约定。

<ListBox x:Name="Entities" ItemsSource="{Binding Entities}"/>
于 2011-05-16T06:18:57.630 回答
0

我不确定,但您可以尝试放入EntityListScreenView命名Views空间和命名空间 - 当然EntityListScreenViewModelViewModels如果您使用“标准”Bootstrapper类。

于 2011-05-16T06:46:32.923 回答