Как я связываю нажатие клавиши с DelegateCommand в Составном WPF?

Вместо того, чтобы использовать сторонний инструмент, можно также высказать довольно хорошее предположение путем рассмотрения всех столбцов в диспетчере задач, если Вы знаете примерно, каковы различные процессы Java в Вашей системе. От вкладки Processes используйте Представление-> Избранные Столбцы и добавьте PID, Процессорное время, Размер VM и количество Потока. Знание примерно, что делает процесс, должно помочь сузить его.

, Например, в приложении клиент-сервер, сервер будет, вероятно, использовать больше памяти, иметь больше потоков и использовал больше процессорного времени, потому что это работало дольше. При уничтожении процесса, потому что он застревает, он мог бы просто использовать больше ЦП прямо сейчас.

МАКС. память "кучи" Java обычно непосредственно отражается в Размере VM. Таким образом, при использовании флагов-Xmx процесс с большей установкой будет иметь больший Размер VM.

11
задан Jasper 11 September 2011 в 10:41
поделиться

2 ответа

В MVVM Toolkit есть класс, называемый CommandReference , который позволит вам использовать ссылку на команду в качестве привязки клавиш.

<Window ...
    xmlns:toolkit="clr-namespace:CannotRememberNamspace;assembly=OrTheAssembly"
    >

    <Window.Resources>
        <toolkit:CommandReference 
                 x:Key="ExitCommandReference" 
                 Command="{Binding ExitCommand}" />
    </Window.Resources>

    <Window.InputBindings>
        <KeyBinding Key="X" 
                    Modifiers="Control" 
                    Command="{StaticResource ExitCommandReference}" />
    </Window.InputBindings>
</Window>

Это сделаю это.

Изменить: Поскольку это было написано, WPF 4.0 исправил эту конкретную проблему, и вам больше не нужно использовать обходной путь статических ресурсов. Вы можете ссылаться на команду в своей модели просмотра непосредственно из KeyBinding.

14
ответ дан 3 December 2019 в 02:40
поделиться

Для справки, класс CommandReference в настоящее время не включен в сборку, которую вы может ссылаться, но включен в шаблон проекта MV-VM. Так что, если вы не собираете свое приложение из шаблона, вам придется получить класс откуда-то еще. Я решил скопировать его из образца проекта. Я включил его ниже, чтобы каждый мог легко получить доступ к этому маленькому кусочку добра, но обязательно проверяйте наличие обновлений для шаблона в будущих версиях MV-VM Toolkit.

/// <summary>
/// This class facilitates associating a key binding in XAML markup to a command
/// defined in a View Model by exposing a Command dependency property.
/// The class derives from Freezable to work around a limitation in WPF when data-binding from XAML.
/// </summary>
public class CommandReference : Freezable, ICommand
{
    public CommandReference( )
    {
    }
    public static readonly DependencyProperty CommandProperty = DependencyProperty.Register( "Command", typeof( ICommand ), typeof( CommandReference ), new PropertyMetadata( new PropertyChangedCallback( OnCommandChanged ) ) );

    public ICommand Command
    {
        get { return (ICommand)GetValue( CommandProperty ); }
        set { SetValue( CommandProperty, value ); }
    }

    #region ICommand Members

    public bool CanExecute(object parameter)
    {
        if (Command != null)
            return Command.CanExecute( parameter );
        return false;
    }

    public void Execute(object parameter)
    {
        Command.Execute( parameter );
    }

    public event EventHandler CanExecuteChanged;

    private static void OnCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        CommandReference commandReference = d as CommandReference;
        if (commandReference != null)
        {
            ICommand oldCommand = e.OldValue as ICommand;
            if (oldCommand != null)
                oldCommand.CanExecuteChanged -= commandReference.CanExecuteChanged;

            ICommand newCommand = e.NewValue as ICommand;
            if (newCommand != null)
                newCommand.CanExecuteChanged += commandReference.CanExecuteChanged;
        }
    }

    #endregion

    #region Freezable

    protected override Freezable CreateInstanceCore( )
    {
        return new CommandReference();
    }

    #endregion
}

Наслаждайтесь!

17
ответ дан 3 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: