Autor Beitrag
Fritziiiii
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 15.11.15 21:04 
Hi,

ich bins mal wieder mit einem kleinen Problem:

Ausgangslage:
Ich habe eine Klasse, die unter anderem eine eine Liste(ListeFarbwerte) von Objekten(Farbwerte) beinhaltet
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
class LED_Programm : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (PropertyChanged != null) PropertyChanged(this, e);
        }

        private static int Counter;
        private int _id;
        private modusLichterkette _mode;
        private int _anzahl_LED;
        private Boolean _faden;
        private Boolean _lauflicht;

        public ObservableCollection<Farbwerte> ListeFarbwerte = new ObservableCollection<Farbwerte>();


In der Klasse LED_Programm wird ein bestimmter Modus festgelegt
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 public modusLichterkette mode
        {
            set {
                _mode = value;
                OnPropertyChanged(new PropertyChangedEventArgs("mode")); 
                OnPropertyChanged(new PropertyChangedEventArgs("ModusParentElement"));
            }
            get { return _mode;  }
        }


Außerdem wird, sobald die Anzahl der LEDs bekannt ist, die ListeFarbwerte befüllt
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
public int anzahl_LED
        {
            get { return _anzahl_LED; }
            set {
                int f_count;
                _anzahl_LED = value;
                f_count = ListeFarbwerte.Count;
                while (f_count < value)
                {
                    Guid myguid = new Guid();
                    myguid = Guid.NewGuid();
                   ListeFarbwerte.Add(new Farbwerte(myguid,255,255,255,this));
                    f_count = ListeFarbwerte.Count;
                }
               
                while (f_count > value)
                {
                    ListeFarbwerte.RemoveAt(f_count-1);
                    f_count = ListeFarbwerte.Count;
                }
                OnPropertyChanged(new PropertyChangedEventArgs("ListeLEDs"));
            }
        }


Damit jeder Farbwert in der Liste weiß, welchen Modus das "ElternElement" hat hab ich die Klasse Farbwert so aufgebaut:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
 class Farbwerte : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (PropertyChanged != null) PropertyChanged(this, e);
        }

        private LED_Programm parentElement;
        private Guid _id;
        private Color _xFarbe;
        public Guid id
        {
            get { return _id; }
            set { _id = value; }
        }

        public string ModusParentElement
        {
            get
            {
                return ((modusLichterkette) parentElement.mode).ToString();
            }
        }

        // Konstruktor
        public Farbwerte(Guid myguid, int rot, int gruen, int blau, LED_Programm p)
        {
           parentElement = p;
            _id = myguid;
            XFarbe = Color.FromArgb(255, Convert.ToByte(rot), Convert.ToByte(gruen), Convert.ToByte(blau));
        }


Zur Darstellung im XAML-Teil hab ich ein DataTemplate, welches in einem Textfeld die Farbwerte ausgibt und einen Button mit dem Modus beschriftet. Das klappt auch alles, aber wenn ich den Modus ändere, hat das auf die Beschriftung der Buttons keine Auswirkung. Erst wenn die Daten neu geladen werden, wird der aktuelle Modus auf den Buttons angezeigt
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
 <DataTemplate x:Key="TemplateLedFarbliste"   >
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <TextBox  Width="100" Grid.Column="0" Text="{Binding Path=RGBFarbwert, Mode=OneWay}">
                    <TextBox.Background>
                        <SolidColorBrush Color="{Binding Path=XFarbe}"></SolidColorBrush>
                    </TextBox.Background>
                </TextBox>
                <Button Grid.Column="1" Command="{x:Static local:MainWindow.ColorButtonCmd}"
                    CommandParameter="{Binding Path=id}"
                   Content="{Binding Path=ModusParentElement}"
                    >
                </Button>
            </Grid>
        </DataTemplate>


Wo muß ich noch ansetzen, damit das Binding so greift, daß auch die "Kind-Elemente" sich ändern, wenn sich beim "Eltern-Element" eine Änderung ergeben hat?

Gruß
Fritziiiii