PRISM DelegateCommand + Пример данных - PullRequest
       15

PRISM DelegateCommand + Пример данных

1 голос
/ 01 декабря 2011

У меня есть ViewModel, который использует свойство DelegateCommand для привязки к Command свойству Button.

Проблема в том, что мои примеры данных не похожи на объект DelegateCommand.Он жалуется, что: The type "DelegateCommand" does not include any accessible constructors. Кроме того, единственным выставленным свойством является свойство IsActive.

<local:MyViewModel xmlns:local="clr-namespace:MyNamespace"
                   xmlns:prism="http://www.codeplex.com/prism">
    <local:MyViewModel.Age>47</local:MyViewModel.Age>
    <local:MyViewModel.PurchaseAlcohalCommand>
        <prism:DelegateCommand IsActive="True" />
    </local:MyViewModel.PurchaseAlcohalCommand>
</local:MyViewModel>

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Способ, которым настроен ваш DelegateCommand, не будет ничего делать, когда он активирован. Если это желаемое поведение, я бы просто предложил не объявлять об этом. WPF будет корректно обрабатывать привязку к объекту null ICommand.

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

Если вы хотите, чтобы он связывался с DelegateCommand, и вы хотели, чтобы DelegateCommand действительно DO что-то при запуске команды, это было бы немного сложнее. Вам придется использовать подкласс DelegateCommand, о котором я упоминал ранее, но вы также должны иметь возможность определять делегата в XAML. Я думаю, что есть образцы, но я предполагаю, что они включают такие вещи, как расширения разметки и тому подобные вещи. Ваш возврат инвестиций при таком подходе может быть немного низким, но пробег может отличаться.

Последняя альтернатива, которая такова: , как правило, обрабатывается: определите DelegateCommands в конструкторе вашей ViewModel .

1 голос
/ 01 декабря 2011

Измените модель представления так, чтобы она представляла ICommand вместо DelegateCommand. DelegateCommand - это просто реализация ICommand; если позже вы захотите переключиться на RelayCommand из MvvmLight, то ваши данные не должны вас волновать.

Я не уверен, что это решит вашу проблему, но я подозреваю, что это возможно. Плюс это просто хорошая практика программирования.

...