ホームページ > バックエンド開発 > C++ > WPF usercontrolsでジェネリックに安全にジェネリックをキャストする方法は?

WPF usercontrolsでジェネリックに安全にジェネリックをキャストする方法は?

Susan Sarandon
リリース: 2025-01-28 18:46:11
オリジナル
240 人が閲覧しました

WPF USERCONTROL FUNCTIONセキュリティコンバージョンガイド

WPFでは、派生したUserControlが自己ベースのクラスと共有されたパブリック機能を継承する場合、派生したuserControlsに隠されたコードが基本クラスの処理を参照する場合があります。ただし、基本クラスからのDataContextへのアクセスは、デリバティブUserControlsの派生型であるため、無効なCaStExceptionを引き起こす可能性があります。

例を見てみましょう:

基本クラスのusercontrol:
<code class="language-csharp">private void SomeClick(object sender, RoutedEventArgs e) {
    HandleClick(sender);
    MyDataGrid.Items.Refresh();
}</code>
ログイン後にコピー

UserControlsのDataContextタイプはbaseViewModel

またはbaseViewModel
<code class="language-csharp">public class BaseUserControl : UserControl {
   protected void HandleClick(object sender) {
       var vm = (BaseViewModel<Part>)DataContext;
       ...
   }
}</code>
ログイン後にコピー
である可能性があるため、これは無効なCaSTExceptionを引き起こします。

なぜ直接変更できないのですか?

How to Safely Cast Generic to Generic in WPF UserControls?
generic&gtに変換されます。次の例を考えてみましょう:

この変換が許可されている場合、羊が動物に追加され、実際にそれをオオカミに追加することが許可されているため、タイプは一致しません。 solution

この問題を解決するために、インターフェイスのコラボレーションまたはインバーターは、必要なタイプのみを読み取ることを余儀なくされます。ただし、この方法は、参照したクラスが必要なインターフェイスを達成した場合にのみ実行可能です。 これには、たとえば、インターフェイスを使用してDataContextのタイプを定義し、共同特性または逆の特性を使用する必要があります。 特定の実装は、の定義と実際のニーズに依存します。

以上がWPF usercontrolsでジェネリックに安全にジェネリックをキャストする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート