Tôi có một lớp tĩnh có chứa một RoutedUICommand mà tôi muốn sử dụng trong ràng buộc.Ràng buộc với một RoutedUICommand không có trong codebehind
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;
}
}
}
Khi tôi cố gắng để tạo ra một CommandBinding cho lệnh AddPage này, VS ném một cơn giận, phàn nàn rằng nó không thể tìm thấy AddPage_CanExecute trong Window1 ... Mà làm cho không có ý nghĩa xem xét rằng tất cả các ví dụ tôi đã nhìn thấy chỉ ra XAML này nên được tốt xem xét đoạn code tôi có tại chỗ:
<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>
tôi cũng đã cố gắng không bao gồm phần Menu.CommandBindings và chỉ đơn giản là sử dụng này (theo this question mà gợi ý này, nhưng không phải là cụ thể):
<MenuItem Header="_New" Command="{x:Static local:CommandLibrary.AddPage}" />
Điều đó tạo ra luồng lỗi nhưng mục menu mà nó tạo ra luôn bị tắt! CanExecute dường như không bao giờ được gọi. Tôi giả định ràng buộc là không trong trường hợp này, là tốt, mặc dù lặng lẽ hơn.
Tại sao VS ghét lệnh của tôi và từ chối tìm đúng địa điểm để tìm phương thức Thực thi và CanExecute? Tôi đã xem một số ví dụ (trong Pro WPF bởi Matthew McDonald và trên một số hướng dẫn trực tuyến tùy chỉnh) đã thực hiện việc này khi tôi đang thực hiện.
Câu trả lời hay. Đã cho tôi những gì tôi cần. Tôi đã đọc qua một số hướng dẫn MVVM và thấy loại sử dụng lệnh này trước đây, nhưng không thể nhớ làm thế nào để làm điều đó vì vậy tôi viện đến các giải pháp tôi tìm thấy trong sách của tôi và thông qua tìm kiếm. Cảm ơn bạn đã giúp đỡ. – evizaer
Đẹp. Tôi đã đập đầu của tôi trên này ... học wpf + mvvm không phải là thẳng về phía trước như tôi muốn. RoutedUICommands nơi quá phức tạp cho những gì tôi dự định và tôi biết rằng cần phải có một cách đơn giản hơn. @Kent, Cảm ơn các ví dụ và blog của bạn. –