Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: WPF command jak nato?

C# .NET .NET (C# a Visual Basic) WPF command jak nato? American English version English version

Aktivity (1)
Avatar
Pavel Novák
Člen
Avatar
Pavel Novák:17. července 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. července 7:23
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Pavel Novák
Lukas C#:17. července 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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 17. července 7:56
Avatar
Pavel Novák
Člen
Avatar
Odpovídá na Lukas C#
Pavel Novák:18. července 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. července 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.