Я работаю над приложением WPF, которое использует инструментарий MVVM Light.Я создаю мастер и хочу показать кнопки для перехода к предыдущему шагу и следующему шагу на каждой странице.Чтобы избежать дублирования кода, я использую пользовательский элемент управления, который предоставляет кнопки.
Я пытаюсь связать свойство Command
следующей кнопки со свойством зависимости, которое определено в коде файла,называется NextStepCommand
.Тип этого свойства RelayCommand
.Свойство зависимости пользовательского элемента управления NextStepCommand
затем должно быть привязано к свойству окна с точно таким же именем NextStepCommand
;конечно, он также имеет тип RelayCommand
.
Однако привязка из свойства окна NextStepCommand
к свойству кнопки Command
не работает.Привязка свойства окна NextStepCommand
к произвольной кнопке, определенной в файле XAML окна, работает нормально;то же самое можно сказать о реализации RelayCommand
в коде пользовательского элемента управления за классом и привязке его к следующей кнопке, определенной в пользовательском элементе управления.Тем не менее, полная ссылка свойства окна на кнопку пользовательского элемента управления не работает, и я не могу найти решение.
Код XAML пользовательского элемента управления показан ниже.
<UserControl DataContext="{Binding RelativeSource={RelativeSource Self}}">
<DockPanel>
<Button DockPanel.Dock="Left"
IsEnabled="{Binding Path=PreviousStepEnabled}"
Command="{Binding Path=PreviousStepCommand}">Back</Button>
<Button DockPanel.Dock="Right"
IsEnabled="{Binding Path=NextStepEnabled}"
Command="{Binding Path=NextStepCommand, Mode=OneWay}">Next</Button>
<Label/>
</DockPanel>
</UserControl>
Пользовательский элемент управления NextStepCommand
определяется следующим образом:
public RelayCommand NextStepCommand
{
get { return (RelayCommand)GetValue(NextStepCommandProperty); }
set { SetValue(NextStepCommandProperty, value); }
}
public static readonly DependencyProperty NextStepCommandProperty =
DependencyProperty.Register(nameof(NextStepCommand), typeof(RelayCommand), typeof(WizardStepSwitchBar), new PropertyMetadata(default(RelayCommand)));
XAML окна отображается ниже.
<MahApps:MetroWindow
xmlns:MahApps="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
DataContext="{Binding Source={StaticResource Locator}, Path=BasicSettings}">
<Grid Style="{StaticResource MainContainerMargin}">
<control:WizardStepSwitchBar Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3" PreviousStepEnabled="False" NextStepCommand="{Binding Path=NextStepCommand, Mode=OneWay}"/>
</Grid>
</MahApps:MetroWindow>
Реализация свойства NextStepCommand
окна довольно проста:
public RelayCommand NextStepCommand
{
get
{
return new RelayCommand(this.OnNextStep);
}
}
private void OnNextStep()
{
MessageBox.Show("It works!");
}
Я пытался использовать этот ответ , но не смог решить мою проблему.Заранее благодарю за поддержку!