калибровочная микро учебная задача - PullRequest
1 голос
/ 03 февраля 2011

Я только начинаю учебник для CM и до последнего примера здесь .Я хотел лучше понять, что я могу сделать с CM, поэтому я сделал кое-что, что обычно делал в проекте wpf, создав папку для Views и папку для ViewModels.Соглашения должны все же найти все, верно?

Все остальные примеры прекрасно работают таким образом, но между неосведомленностью об обоих CM и о том, как отлаживать silverlight, я затрудняюсь объяснить, что кажетсяпроблема контекста данных - отображается только кнопка добавления.

Может кто-нибудь определить проблему?

Cheers,
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> { }
}

ИСПРАВЛЕНИЕ

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

1 Ответ

2 голосов
/ 03 февраля 2011

Проблема в том, что ваш Bootstrapper ссылается на View, а не на ViewModel.Вы должны изменить это на это:

public class HelloBootstrapper : Bootstrapper<IShell> { }

Кроме того, убедитесь, что вы реализуете интерфейс IShell в ShellWithCompositionViewModel в дополнение к применению атрибута экспорта.

...