如何使用Mahapps.Metro WindowCommands和Caliburn Micro进行数据绑定?

时间:2014-07-30 09:34:39

标签: c# data-binding caliburn.micro mahapps.metro

我想绑定我的ShellViewModel

中的IScreens列表
    ...

    public ObservableCollection<IScreen> RightWindowCommands
    {
        get
        {
            return this.rightWindowCommands;
        }
        set
        {
            this.rightWindowCommands = value;
            this.NotifyOfPropertyChange(() => this.RightWindowCommands);
        }
    }

    ...

并使用Mahapps.Metro窗口中的屏幕列表作为WindowCommands

<controls:MetroWindow.RightWindowCommands>
    <controls:WindowCommands ItemsSource="{Binding RightWindowCommands}" >
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ContentControl cal:View.Model="{Binding .}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>           
    </controls:WindowCommands>
</controls:MetroWindow.RightWindowCommands>

它似乎不能以这种方式工作(IScreen作为文本而不是解析视图打印出来)但是如果我将它放入ListBox而不是窗口本身内的MetroWindow.WindowCommands,它就可以工作。似乎Caliburn.Micro没有搜索这个可视树。

有关如何强制校准解析此问题的任何建议吗?

更新

Log:Debug:指定XML'id'和'name' - 使用生成的对象名称[Shells.MyViewModel#3FB40AD] 日志:信息:未应用操作约定:get_Session没有可操作的元素。 日志:信息:未应用操作约定:get_Session没有可操作的元素。 日志:信息:未应用操作约定:句柄没有可操作的元素。 ...

但没有解决无法解决视图或尝试解析视图的问题。

1 个答案:

答案 0 :(得分:0)

我使用 ContentControl 而不是使用 DataTemplate ,使用 ContentControl 解决了问题(即使看起来更加分离)。 DataTemplate 在ContentControl的内容中使用时起作用:

<controls:MetroWindow.RightWindowCommands>
    <controls:WindowCommands>
        <controls:MetroContentControl cal:View.Model="{Binding MySeparateViewModel}" />
    </controls:WindowCommands>
</controls:MetroWindow.RightWindowCommands>

cal:View.Model查看我的 ShellViewModel 的属性。 如果其他人有同样的问题要解决,希望这会有所帮助。