WPF UserControls: имейте команду, которая доступна только внутри UserControl.

Я делаю WPF UserControl.

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

Команда, вызываемая этими кнопками, не должна быть доступна за пределами UserControl.

Если я сделаю свои команды закрытыми, XAML UserControl говорит, что ему нужен открытый член.

Итак, как же получить один UserControl, который имеет несколько команд внутри, но недоступен за пределами UserControl?

Пример:

<Wizard CanGoPrevious=»{Binding SomeViewModelProperty}»> <WizardPage> <TextBlock>Page one</TextBlock> </WizardPage> </Wizard>

XAML мастера:

<DockPanel DataContext=»{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type wizard:Wizard}}}» LastChildFill=»True»> <StackPanel Orientation=»Horizontal» DockPanel.Dock=»Bottom» HorizontalAlignment=»Right»> <Button Content=»{Binding PreviousButtonText}» Command=»{Binding GoToPreviousPageCommand}»/> </StackPanel> <ContentControl ></ContentControl> </DockPanel>

Код волшебника позади:

//Protected doesn’t work. Also, this command should not be available outside of the Wizard `UserControl` protected DelegateCommand GoToPreviousPageCommand { get; set; }

Что назначается так в конструкторе

GoToPreviousPageCommand = new DelegateCommand(GoToPreviousPage, CanGoToPreviousPage); private void GoToPreviousPage() { //[…] } private bool CanGoToNextPage() { //Some usage of the Wizard’s DP: return CanGoPrevious //&& some other stuff }

Не беспокойся. Это пользовательский элемент управления — вполне нормально включать логику, относящуюся к пользовательскому интерфейсу, в программный код.   —  person J4N    schedule 04.09.2015

@Will Хорошо, но не удается предоставить UserControl общедоступный доступ к командам, которые должны быть доступны только для внутреннего использования.   —  person J4N    schedule 04.09.2015

Источник: ledsshop.ru

Стиль жизни - Здоровье!