2017-02-11 13 views
0

Я хочу открыть и закрыть splitview.pane с помощью команд. Это мой пример XAML-код:Изменение свойств xaml с помощью команд

<SplitView Name="AppNavigation" DisplayMode="CompactOverlay" IsPaneOpen="False" CompactPaneLength="50" OpenPaneLength="200"> 
    <SplitView.Pane> 
     <Button Name="Hamburger" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" FontSize="24" Width="50" Height="50" Command="{Binding HamburgerExecute}" /> 
    </SplitView.Pane> 
</SplitView> 

Я использую класс RelayCommand и называть эти два метода:

private bool HamburgerCanExecute(object obj) 
    { 
     return true; 
    } 

    private void HamburgerExecute(object obj) 
    { 
     AppNavigation.IsPaneOpen = !AppNavigation.IsPaneOpen; // this doesn't work 
    } 

Может кто-нибудь объяснить мне, как я использую команды для изменения свойств XAML?

+0

Вы пытались отладить код? Программа входит в вашу команду? Когда вы используете привязку, вы установили datacontext? – Romasz

+0

Возможный дубликат [Как связать кнопку WPF с командой в ViewModelBase?] (Http://stackoverflow.com/questions/12422945/how-to-bind-wpf-button-to-a-command-in-viewmodelbase) Не совсем дубликат, но сводится к той же проблеме. (Как связывать команды) – CSharpie

+0

Вы говорите, что используете класс RelayCommand, который, я полагаю, реализует 'ICommand'. Вы связываетесь с этой командой? Похоже, вы привязываетесь к методу. – Blacktempel

ответ

0

Я забыл интегрировать имен UI ... блин

Так правильный код:

private void HamburgerExecute(object obj) 
{ 
    SplitView navigation = obj as SplitView; 
    navigation.IsPaneOpen = !navigation.IsPaneOpen; 
} 

И CommandParameter в мой файл xaml:

<SplitView Name="AppNavigation" DisplayMode="CompactOverlay" IsPaneOpen="False" CompactPaneLength="50" OpenPaneLength="200"> 
    <SplitView.Pane> 
     <Button Name="Hamburger" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" FontSize="24" Width="50" Height="50" Command="{Binding HamburgerCommand}" CommandParameter="{Binding ElementName=AppNavigation}" /> 
    </SplitView.Pane> 
</SplitView> 
0

Похоже, вы напрямую привязываете метод к своему Button, но вы заявили, что используете RelayCommand. Убедитесь, что вы привязываете RelayCommand, а не фактический метод.

Надеюсь, это поможет!

+0

Спасибо, что все еще была ошибка, но как я могу теперь манипулировать IsPaneOpen? AppNavigation не известно в этом контексте. – r01f

0

Создайте клик-событие в своей кнопке.

<SplitView Name="AppNavigation" DisplayMode="CompactOverlay" IsPaneOpen="False" CompactPaneLength="50" OpenPaneLength="200"> 
<SplitView.Pane> 
    <Button Name="Hamburger" FontFamily="Segoe MDL2 Assets" Content="&#xE700;" FontSize="24" Width="50" Height="50" Click="Hamburger_Click /> 
</SplitView.Pane> 

C#:

private void Hamburger_Click(object sender, RoutedEventArgs e) 
    { 
     AppNavigation.IsPaneOpen = !AppNavigation.IsPaneOpen; 
    } 
+0

Спасибо за ваш ответ, но я хочу использовать команды и шаблон mvvm. Таким образом, событие click в событии кода не является для меня вариантом. – r01f

 Смежные вопросы

  • Нет связанных вопросов^_^