Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public static readonly DependencyProperty KanalNummerProperty = DependencyProperty.Register("KanalNummer", typeof(int), typeof(KanalPanel)); public int KanalNummer { get { return (int)GetValue(KanalNummerProperty); } set { SetValue(KanalNummerProperty, value); RaisePropertyChanged("KanalNummer"); } } |
C#-Quelltext |
|
1 |
Content="{Binding KanalNummer, ElementName=userControl, Mode=TwoWay} |
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 |
public event PropertyChangedEventHandler PropertyChanged; private int _Nummer = 0; public int Nummer { get { return _Nummer; } set { if (value != _Nummer) { _Nummer = value; RaisePropertyChanged("Nummer"); } } } private void RaisePropertyChanged(String PropertyName) { var Handler = PropertyChanged; if (Handler != null) { Handler(this, new PropertyChangedEventArgs(PropertyName)); } } |
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// C# Code public ObservableCollection<Kanal> Kanäle { get; set; } // XAML Code <ListBox ItemsSource="{Binding Kanäle}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionMode="Extended"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <local:KanalPanel KanalNummer="{Binding Path=Nummer, Mode=TwoWay}"/> </DataTemplate> </ItemsControl.ItemTemplate> </ListBox> |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Die GUI ist in beide Richtungen an diese Eigenschaft gebunden:
C#-Quelltext
1 Content="{Binding KanalNummer, ElementName=userControl, Mode=TwoWay}
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Also entferne ich die RaisePropertyChanged Aufrufe alle!? Die Schnittstellenangabe von INotifyPropertyChanged im Klassenkopf und den PropertyChanged-Event auch?Erstmal ist in deinem DependencyPropertyProperty-Setter nicht richtig,
Nein keinen einzigen, wenn ich die Textboxen verändere oder irgendwas anderes ändere.1) Binding-Errors in der Visualstudio Ausgabe?
Ja habe ich. Der Collection werden 6 Kanalklassen hinzugefügt, die auch alle andere Werte haben. Die werden auch korrekt angezeigt. Wenn ich vom Programm aus die Reihenfolge jede Sekunde ändere oder was hinzufüge, dann kann ich das in meiner GUI auch nachverfolgen. Diese Richtung der Bindung klappt also. Nur die andere nicht. Wenn ich einen Haltepunkt im Setter der Kanalklasse setze, bekomme ich auch nur beim Start (wenn Kanäle hinzugefügt werden) Haltepunkte aktiviert.Sind überall auch Objekte gebunden? (ObservableCollection != null und Items darin sind auch nicht null).
Kannst du das mit dem UpdateSourceTrigger anders erklären? Ich weiß nicht was du meinst. Mein KanalPanel ist ein UserControl.2) Eigenes UserControl durch TextBox mit demselben Binding + UpdateSourceTrigger=PropertyChanged verwenden.
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<ListBox ItemsSource="{Binding Kanäle}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionMode="Extended"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <TextBox Text="{Binding Path=Nummer, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> </DataTemplate> </ItemsControl.ItemTemplate> </ListBox> |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Quellcode |
|
1 2 |
<TextBox Text="{Binding Path=Nummer, UpdateSourceTrigger=PropertyChanged}" /> <TextBox Text="{Binding Nummer, UpdateSourceTrigger=PropertyChanged}" /> |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Werbeanzeige