Announcement

Collapse
No announcement yet.

WPF Binding Trigger auf Code-Behind BOOL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WPF Binding Trigger auf Code-Behind BOOL

    Guten Tag,

    ich versuche gerade ein wenig mich in diese ganze Styles und Trigger Geschichte reinzudenken und stoße dabei auf folgende Frage. Ist es möglich einen Trigger auf eine Bool Variable zu leiten?

    Code:
    namespace MenuTest
    {
        public partial class MainWindow : Window
        {
            public bool test=true;
    
            public MainWindow()
            {
                InitializeComponent();
              
            }
          
            public void Umschalten(bool Value)
            {test=Value}
        }
    }
    Code:
                    <MenuItem Header="_Neu">
                        <MenuItem.Style>
                            <Style TargetType="MenuItem">                   
                                <Style.Triggers>
                                    <DataTrigger Binding="Bindung an die Variable">
                                        <Setter Property="IsEnabled" Value="Wert der Variable" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </MenuItem.Style>
                    </MenuItem>
    Also wenn ich von meiner Klasse ausserhalb der Window Klasse die Funktion Umschalten(true); aufrufe dass dann die variable den true Werd erhält und durch den Trigger auch das MenuItem.IsEnabled auf true gesetzt wird.

    Geht sowas überhaupt?

    mfg Daniel

  • #2
    Also im Code Behind würde ich so etwas gar nicht machen. Dafür gibt es in WPF MVVM. Dann solltest Du Dir angewöhnen Felder grundsätzlich nicht public zu machen. Felder sollten immer private sein und nur Properties sollten nach aussen sichtbar sein.
    So wie Du es jetzt gemacht hast, hast Du von der MainWindow Klasse direkt Zugriff auf das UI. Dort könntest Du den Zustand des UI Elements einfach setzen.
    Der richtige Weg wäre allerdings ein ViewModel für die View zu erstellen und die Property "Test" dann auf ein Element im UI zu binden.

    Comment


    • #3
      Guten Tag,

      vielen Dank für die Antwort, leider habe ich noch kein wirklich gutes dt. Tutorial für das MVVM gelesen und daher bei kleineren Sachen sowieso MVC oder so was verwendet. Die Frage war halt ob das so grundsätzlich möglich war. Die Idee dahinter war eigentlich
      die mehrere MenuiItems in Abhängikeit von 3 Variablen zu stellen. Je nach Kombination dieser 3 Bool Variablen sollten dann die MenuItems sichtabr oder halt nicht sicht bar sein. Ich kenne mich mit MVVm halt nicht aus, wie würde man denn dort machen?
      mfg Daniel


      P.S. Das mit dem public / private feldern uns so ist klar, hatte ich jetzt der Kürze halber verzichtet das so zu schreiben!

      Comment


      • #4
        Das ViewModel sähe in etwa so aus:

        [highlight=c#]
        public class BoolViewModel
        {
        private DatenKlasse _daten;

        public BoolViewModel(DatenKlasse daten)
        {
        _daten = daten;
        }

        public bool MenuItem1Visible { get { return _daten.Status1Gesetzt; } }

        public bool MenuItem2Visible { get { return _daten.Status2Gesetzt; } }

        public bool MenuItem3Visible { get { return _daten.Status3Gesetzt; } }
        }
        [/highlight]

        Die daten werden per Dependency Injection in das ViewModel indiziert. Das ViewModel kannst Du ganz einfach an Deine View binden.

        Es ist ganz schlecht, wenn Du keine englische Fachliteratur verstehst. Sehr viel Informatik Fachliteratur ist nur auf Englisch erhältlich.

        Hier gibts aber auch ein MVVM Tutorial:

        http://www.blog-dotnetprogrammierung.de/?p=210
        http://www.blog-dotnetprogrammierung.de/?p=214
        http://www.blog-dotnetprogrammierung.de/?p=219

        Ich habs nicht näher gelesen, aber es gibt bestimmt auch noch andere Tutorials.

        Dieses Buch hier auf Englisch behandelt das Thema auch, allerdings macht der für meinen Geschmack etwas zu viel selbst. Es ist zwar toll sich einen OR Mapper selbst zu bauen. Dass das allerdings langfristig effektiv und zielführend ist glaub ich eher nicht

        Comment


        • #5
          Was die englische Fachliteratur angeht, ist das immer so eine Sache. Ich habe von MVVM noch gar keine Ahnhung und viele Tutorials sind teilweise schon so komplex das es mir schwerfällt da rein zu denken. Daher die Frage nach was Deutschen. (Ich befinde mich noch in der Ausbdilung zum Fachinformatiker AE da habe ich leider nicht soviel Zugriff auf gute Fachliteratur auf Englisch!) Vielleicht einen guten Tip für ein günstiges Buch, das MVVM erklärt (Egal auf Deutsch/Englisch)? Ansonsten vielen Dank für die Tipps!

          Comment


          • #6
            Hm es gibt anscheinend kein deutsches Buch ausschließlich zu MVVM. Es gibt aber genügend Bücher zu WPF in wie weit sich diese allerdings mit MVVM beschäftigen weiss ich leider auch nicht.
            Es kommt natürlich auch drauf an wie groß das Projekt werden soll. Wenn das ein relativ kleines Projekt ist, dann kann man auch auf Code Behind gehen. Dieser Ansatz ist erstmal leichter zu verstehen und man braucht auch nicht sooo viel Infrastruktur drum herum.
            Dazu einfach mal im Eigenschaftseditor schauen welche Events Dein MenuItem hat sich drauf hängen. Dann kannst Du z.B. mitbekommen wann jemand das Control anklickt und im CodeBehind kannst Du das ganze weiterverarbeiten.

            Comment

            Working...
            X