Я делаю 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
Источник: