Делегированная команда не хочет работать

1

Это был еще один длинный день кодирования, и я, вероятно, что-то искал. Но я не могу понять, что ive пропустил

Код С# в ViewModel

public String MainWindowText { get; set; }
public DelegateCommand CommandClose { get; set; }
public TitlebarViewModel()
{
    MainWindowText = "My Epic Window!";
    CommandClose = new DelegateCommand(CloseMain);
}
public void CloseMain(Object Sender)
{
    App.Current.MainWindow.Close();
}
public class DelegateCommand : ICommand
{
    private readonly Predicate<object> _canExecute;
    private readonly Action<object> _execute;
    public DelegateCommand(Action<object> execute)
        : this(execute, null)
    {
    }

    public DelegateCommand(Action<object> execute, Predicate<object> canExecute)
    {
        _execute = execute;
        _canExecute = canExecute;
    }

    public virtual bool CanExecute(object parameter)
    {
        return _canExecute == null ? true : _canExecute(parameter);
    }

    public virtual void Execute(object parameter)
    {
        _execute(parameter);
    }

    public void RaiseCanExecuteChanged()
    {
        if (CanExecuteChanged != null)
        {
            CanExecuteChanged(this, EventArgs.Empty);
        }
    }

    #pragma warning disable 67
    public event EventHandler CanExecuteChanged;
    #pragma warning restore 67
}

Код Xaml:

<Window.DataContext>
    <VM:TitlebarViewModel/>
</Window.DataContext>
<Grid>
    <DockPanel>
        <Image x:Name="Icon" Width="30" Height="30"/>
        <Button x:Name="Close" Content="X" Width="25" Height="25" DockPanel.Dock="Right" Margin="2" Command="{Binding CommandClose}"/>

        <TextBlock x:Name="TitleBarText" Text="{Binding MainWindowText}" TextAlignment="Center" Margin="7"/>
    </DockPanel>
</Grid>

Поэтому текстовое поле MainWindow показывает, что я установил в конструкторе С#, поэтому я знаю, что datacontext работает нормально. Я просто не могу понять, почему я не могу заставить делегированную команду запускаться при нажатии на кнопку.

Я знаю, что это, наверное, действительно глупо. и его что-то простое, но ive смотрел на этот экран в течение 50 минут, и я действительно искал ошибку. особенно когда я делал это 100 раз, и в других элементах управления по всему моему решению

Спасибо, парни.

  • 0
    есть ли ошибки привязки данных? или любой другой, который вы можете заметить в окне вывода?
  • 0
    не для этого конкретного класса. или целевой элемент
Показать ещё 4 комментария
Теги:
xaml
wpf
delegatecommand

1 ответ

0

Хорошо, как просили. это приложение использует элемент управления activeX. этот контроль имеет проблемы с воздушным пространством. поэтому я наложил окно с другим окном, используя прозрачность.

когда вы это делаете, вам нужно в значительной степени переписать весь код для перемещения/перетаскивания или того, что когда-либо для окна. поэтому я добавил несколько кода, чтобы разрешить "когда я перемещаю окно, перемещаю его поверх него",

поэтому я использовал этот код

    private void EventHandlers()
    {
        this.LocationChanged += Titlebar_LocationChanged;
        this.Loaded += Titlebar_Loaded;
        this.PreviewMouseLeftButtonDown += Titlebar_PreviewMouseLeftButtonDown;
        this.PreviewMouseLeftButtonUp += Titlebar_PreviewMouseLeftButtonUp;
        this.MouseDoubleClick += Titlebar_MouseDoubleClick;
    }

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

я просто изменил обработчик события для чтения

    private void EventHandlers()
    {
        this.LocationChanged += Titlebar_LocationChanged;
        this.Loaded += Titlebar_Loaded;
        this.MouseLeftButtonDown += Titlebar_PreviewMouseLeftButtonDown;
        this.PreviewMouseLeftButtonUp += Titlebar_PreviewMouseLeftButtonUp;
        this.MouseDoubleClick += Titlebar_MouseDoubleClick;
    }

этот триггер происходит после нажатия любой кнопки внутри элемента управления. Да, так глупо, как это может показаться опытным программистам. даже иногда мы имеем блоки памяти. пожалуйста, не судите меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню