Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Einträge in der Menüleiste werden nicht Freigeschaltet
Loofsy
myCSharp.de - Member



Dabei seit:
Beiträge: 18

Themenstarter:

Einträge in der Menüleiste werden nicht Freigeschaltet

beantworten | zitieren | melden

Hallo liebe Community,

ich entwickle gerade eine Firmenlösung auf WPF Basis. In meinem Hauptfenster gibt es eine Menüleiste welche ich so eingestellt hab, dass Mitarbeiter sich erst einloggen müssen ehe sie von den Menüreitern gebrauch machen können.


<Window x:Class="Delphin.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:Delphin"
        mc:Ignorable="d"
        Title="MainWindow" Height="768" Width="1024" WindowStartupLocation="CenterScreen" WindowState="Maximized" ResizeMode="NoResize">
    <Grid>
        <DockPanel LastChildFill="False">
            <Menu DockPanel.Dock="Top" x:Name="Menu">
                <Menu.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="White" Offset="0"/>
                        <GradientStop Color="#FF54DFE6" Offset="1"/>
                    </LinearGradientBrush>
                </Menu.Background>
                <MenuItem Header="Datei" >
                    <MenuItem Header="Anmelden" x:Name="Menu_File_Logon" Click="Menu_File_Logon_Click" />
                    <MenuItem Header="Abmelden" x:Name="Menu_File_Logoff" Click="Menu_File_Logoff_Click" />
                    <MenuItem Header="Beenden" x:Name="Menu_File_Exit" Click="Menu_File_Exit_Click" />
                </MenuItem>
                <MenuItem Header="Mitarbeiter" x:Name="Menu_Employee">

                </MenuItem>
                <MenuItem Header="Kunde" x:Name="Menu_Customer">

                </MenuItem>
                <MenuItem Header="Produkte" x:Name="Menu_Products">

                </MenuItem>
                <MenuItem Header="Webseite" x:Name="Menu_Website">

                </MenuItem>
                <MenuItem Header="Firma" x:Name="Menu_Company">

                </MenuItem>
                <MenuItem Header="Einstellungen" x:Name="Menu_Settings">

                </MenuItem>
                <MenuItem Header="Hilfe" x:Name="Menu_Help">

                </MenuItem>
            </Menu>
        </DockPanel>
        <Canvas>
            <Frame x:Name="MainContent" Height="718" Width="1018" Canvas.Top="21"/>
        </Canvas>
    </Grid>
</Window>



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Delphin.View.File;
using Delphin.ViewModels;
using Delphin.Res.Includes;

namespace Delphin
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private SystemConfig _sc; // läd im wesentlichen die Property public bool IsUserLoggedOn {get; set;} dessen wert Standart false ist

        public MainWindow()
        {
            InitializeComponent();
            StdLoad();
            _sc = new SystemConfig();
        }

        private void StdLoad()
        {
            Menu_Employee.IsEnabled = false;
            Menu_Customer.IsEnabled = false;
            Menu_Products.IsEnabled = false;
            Menu_Website.IsEnabled = false;
            Menu_Company.IsEnabled = false;
            Menu_Settings.IsEnabled = false;
            Menu_Help.IsEnabled = false;
            Menu_File_Logoff.IsEnabled = false;
        }

        public void Update()
        {
            Menu_File_Exit.IsEnabled = false;
            Menu_File_Logon.IsEnabled = false;
            Menu_Employee.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Customer.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Products.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Website.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Company.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Settings.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Help.IsEnabled = _sc.IsUserLoggedOn;
            Menu_File_Logoff.IsEnabled = _sc.IsUserLoggedOn;
            Menu.UpdateLayout();
        }
        private void Menu_File_Logon_Click(object sender, RoutedEventArgs e)
        {
            MainContent.Content = new LogonPage();
        }

        private void Menu_File_Logoff_Click(object sender, RoutedEventArgs e)
        {

        }

        private void Menu_File_Exit_Click(object sender, RoutedEventArgs e)
        {

        }
    }
}

Nun zu meinem Problem. Wenn man Datei->Anmelden anklickt wird das Anmeldeformular geladen. Siehe:


<Page x:Class="Delphin.View.File.LogonPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Delphin.View.File"
      mc:Ignorable="d" 
      d:DesignHeight="768" d:DesignWidth="1024"
     
      Title="LogonPage"
      >

    <Grid>
        <Canvas>
            <TextBox Height="23" Canvas.Left="393" TextWrapping="Wrap" Canvas.Top="201" Width="120"/>
            <PasswordBox Canvas.Left="393" Canvas.Top="238" Width="120" Height="23"/>
            <Label Content="Benutzerkennung" Canvas.Left="250" Canvas.Top="197"/>
            <Label Content="Passwort" Canvas.Left="295" Canvas.Top="235"/>
            <Button Content="Anmelden" Click="Logon_Btn_Logon" Canvas.Left="393" Canvas.Top="285" Width="120"/>
            
        </Canvas>

    </Grid>
</Page>


Logon_Btn_Logon löst DoLogon() aus und soll nun die gesperrten Menüelemente freigeben:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Delphin.Res.Includes;

namespace Delphin.ViewModels.File
{
    public class LogonPageModel
    {
        private SystemConfig _sc;
        private MainWindowModel _mwm;
        public LogonPageModel()
        {
            _sc = new SystemConfig();
            _mwm = new MainWindowModel();
        }

        public void DoLogon()
        {
            _sc.IsUserLoggedOn = true;
            SetLogon();
        }

        public void SetLogon()
        {
/**
public void Update()
        {
            Menu_File_Exit.IsEnabled = false;
            Menu_File_Logon.IsEnabled = false;
            Menu_Employee.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Customer.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Products.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Website.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Company.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Settings.IsEnabled = _sc.IsUserLoggedOn;
            Menu_Help.IsEnabled = _sc.IsUserLoggedOn;
            Menu_File_Logoff.IsEnabled = _sc.IsUserLoggedOn;
            Menu.UpdateLayout();
        }
*/
            _mwm.Update();
            
        }
    }
}

Doch die schaltung auf Enable funktioniert nicht. Leider wird auch keine Fehlermeldung ausgegeben. Woran liegt das?

Also kurz zusammengefast: Die Menüelemente sind standart IsEnable=false. Nach dem Click auf "Anmelden" sollen die Elemete auf IsEnable=true schalten.

Danke im vorraus
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 394
Herkunft: Kassel

beantworten | zitieren | melden

Hi,

bei WPF verwendet man am besten DataBinding.
Damit würdest du dir den meisten Code dort sparen und vermutlich auch dein Problem beheben.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4182

beantworten | zitieren | melden

@Loofy: Wie kommst du darauf, daß bei


_mwm = new MainWindowModel();
und


_mwm.Update();
irgendetwas (sinnvolles) passieren kann?

Da du anscheinend dich ja schon mal mit ViewModels beschäftigt hast, solltest du (so wie schon von Papst geschrieben) deinen Code komplett auf DataBinding umstellen, s.a. [Artikel] MVVM und DataBinding.
private Nachricht | Beiträge des Benutzers