NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Pavel Novák
Člen
Avatar
Pavel Novák:17.7.2017 7:23

Mám takový problém:

zkouším si vyvořit menu s příkazy pro manipulaci se soubory - to sice funguje , ale jen jednou po startu aplikace

pro ukázku dám kód s jedním menuItemem s příkazem "New" , kde otvírám SaveFileDialog - to funguje dobře do té doby, než zpracuju nějaký jiný event - zde třeba buttonClick - pak je položka v menu nedostupná - co je potřeba udělat, aby tomu tak nebylo?
Nějak se mi nedaří vygooglit odpověď - proto seobracím sem.

xaml:

<Window x:Class="TestCommand.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TestCommand"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Menu Name="menu">
            <MenuItem Name="file" Header="File" >
                <MenuItem Name="newCommand" Command="New" CommandManager.Executed="newCommand_Executed" CommandManager.CanExecute="new_CanExecute" />
            </MenuItem>

        </Menu>
        <Button x:Name="btn1" Content="Button" Width="75" HorizontalAlignment="Center" VerticalAlignment="Center" Click="btn1_Click"/>
    </Grid>
</Window>

code:

using Microsoft.Win32;
using System.Windows;
using System.Windows.Input;

namespace TestCommand
{
    /// <summary>
    /// Interakční logika pro MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void new_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = true;
        }


        private void btn1_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("OK");
        }

        private void newCommand_Executed(object sender, ExecutedRoutedEventArgs e)
        {
           SaveFileDialog sfd = new SaveFileDialog();
            sfd.ShowDialog();
        }
    }
}
 
Odpovědět
17.7.2017 7:23
Avatar
Odpovídá na Pavel Novák
Neaktivní uživatel:17.7.2017 7:56

Ještě jsem neviděl, aby se takhle propojoval command s event handlery - vždycky jsem to dělal přes CommandBinding kolekci (implementace RoutedCommand je taková, že vyvolá event, který postupuje - bublá - elementy, dokud nenarazí na CommandBinding)

<Menu Name="menu">
           <MenuItem Name="file" Header="File" >
               <MenuItem.CommandBindings>
                   <CommandBinding Command="New" Executed="newCommand_Executed" CanExecute="new_CanExecute"/>
               </MenuItem.CommandBindings>
               <MenuItem Name="newCommand" Command="New"/>
           </MenuItem>

       </Menu>

Tohle funguje jak požaduješ, ale upřímně ti nejsu schopný říct, proč tvoje řešení nefunguje anebo proč vůbec funguje častečně...

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
17.7.2017 7:56
Neaktivní uživatelský účet
Avatar
Pavel Novák
Člen
Avatar
Odpovídá na Neaktivní uživatel
Pavel Novák:18.7.2017 6:42

nevím , určitě jsem to někde zkopíroval - to tvoje ale funguje, takže dík

 
Nahoru Odpovědět
18.7.2017 6:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.