нажатие кнопки wpf - PullRequest
       10

нажатие кнопки wpf

4 голосов
/ 04 марта 2011

У меня есть приложение WPF с 5 страницами. На моем главном окне у меня есть 5 кнопок. Я хотел бы нажать кнопку 1, чтобы открыть страницу 1 в рамке главного окна. Я не хочу использовать окно навигации. Должен ли я использовать какой-то вид привязки? Я хотел бы использовать xmal, чем меньше кода, тем лучше. Заранее спасибо Я нахожусь в стадии обучения!

Ответы [ 2 ]

3 голосов
/ 04 марта 2011

Вы можете установить кнопки Нажмите обработчики событий для вызова Frame.Navigate (Uri) с соответствующей страницей.

В XAML:

<Frame Name="myFrame"/>
<Button Name="buttonPage1" Click="OnClickPage1"> 
     Page1
</Button>

Тогда в коде позади:

void OnClickPage1(object sender, RoutedEventArgs e)
{
    myFrame.Navigate(new Uri("page1"));
}
1 голос
/ 04 марта 2011

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

Моя рекомендация, и это относится ко всем разработкам WPF, - принять MVVM. Это даст вам больше гибкости и тестируемости.

Чтобы реализовать вашу проблему в MVVM:

Создание ViewModels для каждого из ваших представлений и по одному для вашего главного окна

Каждая ViewModel становится DataContext для своего соответствующего View.

В MainWindowViewModel реализуйте 5 свойств ICommand и свяжите свойство Command на кнопке с каждым соответствующим свойством ICommand в MainWindowViewModel.

В главном окне я не уверен, реализуете ли вы элемент управления Frame, но я бы предложил использовать ContentControl, связать свойство Content в элементе управления с некоторым свойством типа Object в MainWindowViewModel.

При выполнении каждого из объектов ICommand вы должны установить свойство содержимого в MainWindowViewModel равным ViewModel для этой кнопки.

В MainWindowView.xaml вам необходимо реализовать серию DataTemplates, которые отображают ViewModel в View:

<DataTemplate DataType="{x:Type Page1ViewModel}">
    <AdornerDecorator>
        <views:Page1View DataContext="{Binding}"/>
    </AdornerDecorator>
</DataTemplate>

Я бы посоветовал вам взглянуть на использование одной из множества доступных платформ MVVM.

MVVMFoundation - легкий вес, минимальная реализация

MVVMLight - более тяжелый каркас

Caliburn - кажется, имеет много дополнительных функций

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

...