Heim > Backend-Entwicklung > C++ > Wie kann man in WPF UserControls sicher generisches bis generisches gründen?

Wie kann man in WPF UserControls sicher generisches bis generisches gründen?

Susan Sarandon
Freigeben: 2025-01-28 18:46:11
Original
208 Leute haben es durchsucht

WPF UserControl -Funktionssicherheits -Konvertierungshandbuch

In WPF erbt der abgeleitete Usercontrol die selbstbasierte Klasse und gemeinsame öffentliche Funktionen, der von den abgeleitete Usercontrols verborgene Code kann auf die Basisklassenverarbeitung verweisen. Der Zugriff auf DataContext aus der Basisklasse kann jedoch eine InvalidCastException verursachen, da es sich um einen Ableitungsart in den abgeleiteten UserControls handelt.

Schauen wir uns ein Beispiel an:

<code class="language-csharp">private void SomeClick(object sender, RoutedEventArgs e) {
    HandleClick(sender);
    MyDataGrid.Items.Refresh();
}</code>
Nach dem Login kopieren

in der Basisklasse UserControl:

<code class="language-csharp">public class BaseUserControl : UserControl {
   protected void HandleClick(object sender) {
       var vm = (BaseViewModel<Part>)DataContext;
       ...
   }
}</code>
Nach dem Login kopieren

Dies führt zu InvalidCastException, da der DataContext -Typ in UserControls BaseViewModel oder BaseViewModel sein kann.

How to Safely Cast Generic to Generic in WPF UserControls?

Warum kann es nicht direkt geändert werden?

Konvertieren von Gene & lt; Betrachten Sie das folgende Beispiel:

Wenn diese Umwandlung erlaubt ist, wird ein Schaf zu Tieren hinzugefügt, und es darf es tatsächlich zu Wölfen hinzufügen, was dazu führt, dass der Typ nicht übereinstimmt.

Lösung
<code class="language-csharp">List<wolf> wolves = new List<wolf>();
List<animal> animals = (List<animal>)wolves; // 无法转换</code>
Nach dem Login kopieren

Um dieses Problem zu lösen, kann die Zusammenarbeit oder der Wechselrichter der Schnittstelle gezwungen werden, nur den erforderlichen Typ zu lesen. Diese Methode kann jedoch nur möglich sein, wenn die von Ihnen verwiesene Klasse die erforderliche Schnittstelle erreicht. Dies erfordert die Anpassung der Codestruktur. Die spezifische Implementierung hängt von der Definition und den tatsächlichen Bedürfnissen von ab.

Das obige ist der detaillierte Inhalt vonWie kann man in WPF UserControls sicher generisches bis generisches gründen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage