Nur Eigenschaft für ein Objekt festlegen

8

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.

%Vor%     
user1702369 07.09.2017, 10:49
quelle

3 Antworten

6

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:

%Vor%

Beispielcode:

%Vor%

Ich habe ein DotNetFiddle-Beispiel hier

erstellt     
Pikoh 07.09.2017 11:28
quelle
4

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:

%Vor%

Jetzt kann die Collection-Klasse wie folgt implementiert werden: Sie verarbeitet jedes Employee s ResponsiblePersonChanged event:

%Vor%

Ein Beispiel:

%Vor%     
Tim Schmelter 07.09.2017 14:23
quelle
1

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

    
Dan Rayson 07.09.2017 11:03
quelle

Tags und Links