Wie kann ich eine boolesche Eigenschaft wie einen RadioButton erstellen? Sie wissen, wie ein RadioButton kann nur einer ausgewählt werden?
Wie das Beispiel unten zeigt.
Wenn ich einen Mitarbeiter IsResponsiblePerson
auf true setze, sollte er alle anderen auf false setzen. Ohne eine Schleife zu verwenden.
Was ich wahrscheinlich tun würde, wenn ich keine Schleifen verwenden möchte, ist, wie Lasse V. Karlsen in einem Kommentar sagt, stattdessen der Name des "ResponsiblePerson" in einer anderen Eigenschaft:
%Vor% Und ändern Sie die Eigenschaft IsResponsiblePerson
in etwa so:
Beispielcode:
%Vor%Ich habe ein DotNetFiddle-Beispiel hier
erstellt Dies ist der ideale Anwendungsfall für einen neuen Sammlertyp, der von List<Employee>
oder ObservableCollection<Employee>
erbt. Dort können Sie die gesamte Logik einkapseln.
Bevor Sie Ihre Employee
-Klasse durch ein benutzerdefiniertes Ereignis intelligenter machen sollten, möchte die Sammlungsklasse wissen, wann die Eigenschaft IsResponsiblePerson
auf true
gesetzt wurde, weil sie dann die alte verantwortliche ändern muss. Zum Beispiel so:
Jetzt kann die Collection-Klasse wie folgt implementiert werden: Sie verarbeitet jedes Employee
s ResponsiblePersonChanged
event:
Ein Beispiel:
%Vor%Leider ist Ihr Beispiel kurz davor, das Ereignis "changed" für den booleschen Wert zu behandeln, aber nicht ganz. In Ihrem Beispiel können nur Änderungen an der Sammlung behandelt werden, anstatt Änderungen an einem ihrer internen Elemente vorzunehmen.
Dazu müssten Sie INotifyPropertyChanged
implementieren, Hier ist ein Beispiel . Obwohl es nur eine Idee gibt, gibt es eine Million Benachrichtigungsmechanismen, also forschen Sie daran.
Um Ihre Frage zu beantworten ("Wie aktualisiere ich andere Mitglieder einer Sammlung, wenn sich eine Elementeigenschaft ändert"), müssen Sie das geänderte Ereignis für die spezifische Eigenschaft behandeln, in Ihrem Fall IsResponsiblePerson
. Dann können Sie in diesem Handler Linq verwenden (der intern Schleifen verwendet), aber was auch immer passiert, Sie werden IMMER eine Operation auf der gesamten Liste durchführen müssen (vielleicht könnte die Schleife vorzeitig unterbrochen werden), um das zu erreichen, was Sie verlangen .
Ein anderes zu untersuchendes Konzept ist ObservableObject
, sehr nah verwandt mit INotifyPropertyChanged
. Hier ist das Dokument darauf
Tags und Links c#