Frage

Ich beginne gerade mit dem Tutorial für CM und bis zum letzten Beispiel. hier .Ich wollte ein besseres Gefühl dafür bekommen, was ich mit CM machen kann, also habe ich etwas getan, was ich normalerweise in einem wpf-Projekt tun würde, einen Ordner für Ansichten und einen Ordner für ViewModels zu erstellen.Konventionen sollten immer noch alles finden, oder?

Alle anderen Beispiele funktionieren auf diese Weise hervorragend, aber zwischen der Unkenntnis von CM und dem Debuggen von Silverlight kann ich nicht erklären, was ein Datenkontextproblem zu sein scheint - nichts als die Schaltfläche "Hinzufügen" wird angezeigt.

Kann jemand das Problem erkennen?

Prost,
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); }
}

ANSICHT
<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> { }
}

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

War es hilfreich?

Lösung

Das Problem ist, dass Ihr Bootstrapper eher auf die Ansicht als auf das ViewModel verweist.Sie sollten dies folgendermaßen ändern:

public class HelloBootstrapper : Bootstrapper<IShell> { }

Stellen Sie außerdem sicher, dass Sie die IShell-Schnittstelle in ShellWithCompositionViewModel implementieren und zusätzlich das Exportattribut anwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top