none
Wie kann man eine Klassen die mit einen Datatemplate instanziert werden erreichen? RRS feed

  • Frage

  • Ich habe eine Klasse Alarm.cs angelegt.

    class Alarm
        {
            public bool isEnabled;
            public TimeSpan time;
            public Dictionary<DayOfWeek, bool> days;
            public string description;
    
            public Alarm(int hours, int minutes)
            {
                this.isEnabled = true;
                time = new TimeSpan(hours, minutes, 0);
    
                if (hours > 23 || hours < 0)
                    throw new Exception("Stunden müssen im Bereich 0-23 liegen");
    
                if(minutes > 59 || minutes < 0)
                    throw new Exception("Minuten müssen im Bereich 0-59 liegen");
                
                this.days = new Dictionary<DayOfWeek,bool>() {
                    { DayOfWeek.Monday, true},
                    { DayOfWeek.Tuesday, true},
                    { DayOfWeek.Wednesday, true},
                    { DayOfWeek.Thursday, true},
                    { DayOfWeek.Friday, true},
                    { DayOfWeek.Saturday, true},
                    { DayOfWeek.Sunday, true},
                };
    
                this.description = "Beschreibung";
            }

    Die Instanzen der Klasse Alarm werden innerhalb eines Datatemplates dargestellt.

    <ListView ItemsSource="{x:Bind alarmsCollection}" Grid.Column="0">
                <ListView.ItemTemplate>
                    <DataTemplate x:DataType="local:Alarm">
                        <StackPanel Orientation="Horizontal">
                            <ToggleSwitch Name="alarm_toggleSwitch"/>
                            <TimePicker Name="alarm_TimePicker" TimeChanged="alarm_TimePicker_TimeChanged" 
                                        IsEnabled="{Binding IsOn, ElementName=alarm_toggleSwitch}" 
                                        Time="{x:Bind time, Mode=TwoWay}"/>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

    Wie kann ich nun die Variable "isEnabled" in Alarm.cs ändern, wenn der spezielle ToggleSwitch, der für jede Instanz erzeugt wird im Datatemplate, geschaltet wird?

    Danke schon mal im Voraus!

    Freitag, 27. Mai 2016 17:10

Antworten

  • Hallo,

    die Antwort ist wieder "mit Datenbindungen" ;)

    <ToggleSwitch Name="alarm_toggleSwitch" IsOn={Binding IsEnabled, Mode=TwoWay}/>

    Durch das TwoWay ruft das Control den Wert aus der Instanz ab und der Wert wird bei einer Änderung auch zurück geschrieben.

    Du musst deine Klasse aber auch noch abändern, denn Bindings funktionieren nur mit Eigenschaften:

    public bool IsEnabled{get;set;}
    public TimeSpan Ttime{get;set;}
    public Dictionary<DayOfWeek, bool> Days{get;set;}
    public string Description{get;set;}
    Ds solltest du allgemein überall umsetzen. Öffentliche Felder (Variablen) sollte man nicht verwenden. Dafür gibt es Eigenschaften. Auch sollte dir auffallen, dass ich die Groß/Kleinschreibung angepasst habe. Beo öffentlichen Membern wird üblicherweise CamelCase genutzt (Name und Merkhilfe was es ist zugleich).


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert noesbud Freitag, 27. Mai 2016 19:08
    Freitag, 27. Mai 2016 19:05

Alle Antworten