Laden...

Einträge in der Menüleiste werden nicht Freigeschaltet

Erstellt von Loofsy vor 2 Jahren Letzter Beitrag vor 2 Jahren 223 Views
L
Loofsy Themenstarter:in
32 Beiträge seit 2020
vor 2 Jahren
Einträge in der Menüleiste werden nicht Freigeschaltet

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

P
441 Beiträge seit 2014
vor 2 Jahren

Hi,

bei WPF verwendet man am besten DataBinding.
Damit würdest du dir den meisten Code dort sparen und vermutlich auch dein Problem beheben.

4.931 Beiträge seit 2008
vor 2 Jahren

@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.