在WPF中安全地將泛型轉換為泛型的技巧
在WPF中,創建提供派生用戶控件共享功能的基用戶控件是很常見的做法。為了確保從派生實例訪問此功能,事件通常在派生用戶控件的代碼隱藏中調用,例如:
<code class="language-csharp">private void SomeClick(object sender, RoutedEventArgs e) { HandleClick(sender); MyDataGrid.Items.Refresh(); }</code>
但是,基用戶控件的HandleClick方法可能需要特定的類型參數:
<code class="language-csharp">public class BaseUserControl : UserControl { protected void HandleClick(object sender) { var vm = (BaseViewModel<零件>)DataContext; ... } }</code>
如果派生用戶控件中的DataContext是派生類型,例如BaseViewModel,則會發生InvalidCastException異常。這是因為DataContext不能直接轉換為BaseViewModel。
為什麼不能將Generic轉換為Generic?
禁止將Generic轉換為Generic,因為它可能導致不一致。想像一下,將List轉換為List。然後,您可能將Sheep對象添加到List中,儘管在原始List中不允許這樣做。
替代方案
為了解決這個問題,可以考慮以下替代方案:
以上是如何在WPF中安全地將通用施加給通用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!