2011-02-03 76 views
1

我刚刚开始CM的教程,直到最后一个例子here。我想更好地感受一下我可以用CM做些什么,所以我在wpf项目中做了一些我通常会做的事情,为Views创建一个文件夹,为ViewModel创建一个文件夹。公约应该仍然可以找到一切,对吧?caliburn微型教程问题

所有其他示例都以这种方式工作得很好,但在对CM和如何调试silverlight一无所知之间,我无法解释看起来像是数据上下文问题 - 只是添加按钮显示。

有人可以发现问题吗?

干杯,
Berryl

VM

[Export(typeof(IShell))] 
public class ShellWithCompositionViewModel : PropertyChangedBase 
{ 
    public BindableCollection<Model> Items { get; private set; } 

    public ShellWithCompositionViewModel() { 
     Items = new BindableCollection<Model> 
       { 
        new Model {Id = Guid.NewGuid()}, 
        new Model {Id = Guid.NewGuid()}, 
        new Model {Id = Guid.NewGuid()}, 
        new Model {Id = Guid.NewGuid()} 
       }; 
    } 

    public void Add() { Items.Add(new Model {Id = Guid.NewGuid()}); } 

    public void Remove(Model child) { Items.Remove(child); } 
} 

VIEW

<UserControl x:Class="Caliburn.Micro.Hello.Views.ShellWithCompositionView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:cal="http://www.caliburnproject.org" 
     > 
<StackPanel> 

    <ItemsControl x:Name="Items"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Button Content="Remove" cal:Message.Attach="Remove($dataContext)" /> 
        <TextBlock Text="{Binding Id}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

    <Button Content="Add" cal:Message.Attach="Add" /> 

</StackPanel> 

BOOT

namespace Caliburn.Micro.Hello 
{ 
    //public class HelloBootstrapper : Bootstrapper<ShellViewModel> { } 
    //public class HelloBootstrapper : Bootstrapper<ShellWithParametersViewModel> { } 
    public class HelloBootstrapper : Bootstrapper<ShellWithCompositionView> { } 
} 

的FIX

// left off the model the 1st time (caps not needed!) 
public class HelloBootstrapper : Bootstrapper<ShellWithCompositionViewMODEL> { } 
+0

Duh ...这实际上是一个简单的问题,绝对不是CM问题。线索在Bootstrapper中,如果有人想要一些快速回答的话。 – Berryl 2011-02-03 14:44:38

回答

2

的问题是,你的引导程序引用视图,而不是视图模型。你应该把它改成这样:

public class HelloBootstrapper : Bootstrapper<IShell> { } 

另外,确保您实现对ShellWithCompositionViewModel的IShell的接口,除了应用导出属性。

+0

是的 - 没想到我不得不等待*你*挖出十点,但: - ) – Berryl 2011-02-03 22:07:54