Я делаю 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
