Die Bindung an eine RoutedUICommand, das nicht im codebehind

Ich habe eine statische Klasse, die enthält eine RoutedUICommand, dass, würde ich mag zu verwenden, in der Bindung.

public static class CommandLibrary
{
    public static ProjectViewModel Project { get; set; }

    public static RoutedUICommand AddPage { get; private set; }

    static CommandLibrary()
    {
        AddPage = new RoutedUICommand("AddPage", "AddPage", typeof(CommandLibrary));

    }

    public static void AddPage_Executed(object sender, ExecutedRoutedEventArgs args)
    {
        Project.AddPage();
    }

    public static void AddPage_CanExecute(object sender, CanExecuteRoutedEventArgs args)
    {
        //We need a project before we can add pages.
        if (Project != null)
        {
            args.CanExecute = true;
        }
        else
        {
            //Did not find project, turning Add Page off.
            args.CanExecute = false;
        }
    }
}

Wenn ich Versuch, ein CommandBinding für diese AddPage Befehl, VS bekommt einen Wutanfall, weil er sich beschwerte, dass es nicht finden können, AddPage_CanExecute in Window1... Das macht keinen Sinn, wenn man bedenkt, dass all die Beispiele, die ich gesehen habe zeigen, das XAML-sollte in Ordnung sein, bedenkt man den code habe ich in:

<Window x:Class="MyProject.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyProject">
    <Menu>
        <Menu.CommandBindings>
            <CommandBinding Command="local:CommandLibrary.AddPage" 
                            Executed="AddPage_Executed" CanExecute="AddPage_CanExecute" />
        </Menu.CommandBindings>
        <MenuItem Header="_Page">
            <MenuItem Header="_New" Command="local:CommandLibrary.AddPage" />
        </MenuItem>
    </Menu>
</Window>

Ich hab auch schon versucht auch nicht das Menü.CommandBindings Abschnitt und einfach diesen (als pro diese Frage, die nahelegt, diese aber nicht spezifisch ist):

<MenuItem Header="_New" Command="{x:Static local:CommandLibrary.AddPage}" />

Dass staunched den Fluss der Fehler, aber der Menüpunkt, den es generiert, wird immer deaktiviert! Die CanExecute-scheint nie zu bekommen, genannt. Ich gehe davon aus, dass die Bindung versagt in diesem Fall, wie auch, aber leiser.

Warum VS hasse meinen Befehl und verweigern den Blick in die richtige Stelle zu finden, die Sie Ausgeführt werden, und die CanExecute-Methode? Ich habe gesehen, eine Reihe von Beispielen (in Pro WPF von Matthew McDonald und auf mehreren benutzerdefinierten Befehl Lernprogramme online), die dies getan haben, so wie ich bin, es zu tun.

InformationsquelleAutor evizaer | 2009-08-15
Schreibe einen Kommentar