用户控件视图模型中定义的事件处理程序保持为空

问题描述 投票:0回答:0

我有一个独立的用户控件类库(WPF),它实际上定义了一个事件。 此事件必须由已加载用户控件的 WPF 主机应用程序(exe)处理。

但是,当我为用户控件调试时遵循下面的代码,事件“WebDataReceived”仍然存在,因此不会触发 WPF 主机中的处理程序/订阅者(即“ReceiveJsonData”)。

UserControl视图模型类:

public class WebViewModel: ViewBase
{
    public event EventHandler<string> WebDataReceived;
    private void CoreWebView2_WebMessageReceived(object? sender, 
                                                 CoreWebView2WebMessageReceivedEventArgs e)
        {
            // Deserialize JSON data
            var data = JsonSerializer.Deserialize<string>(e.WebMessageAsJson);

            // Raise event with incoming data
            //WebDataReceived?.Invoke(this, data);
            WebDataReceived?.Invoke(this, data);
        }
}

每当触发语句“WebDataReceived?.Invoke()”时,“WebDataReceived”保持为空。

订阅事件的WPF-Host代码隐藏类及其事件处理程序所在的视图模型:

请注意,“WebViewUC”是我的用户控件对象,“WebHostViewModel”是 WPF-Host 的视图模型。

    public partial class MainWindow : Window
    {
            InitializeComponent();
            webViewUC = new WebViewUC();
            webHostViewModel = new WebHostViewModel(webViewUC);  
            this.DataContext= webHostViewModel;
            webViewUC.WebViewModel.WebDataReceived += WebViewModel_WebDataReceived;
        }

        private void WebViewModel_WebDataReceived(object? sender, string e)
        {
            webHostViewModel.ReceiveJsonData(sender,e);
        }
   }
   internal class WebHostViewModel : INotifyPropertyChanged
   {
        public void ReceiveJsonData(object? sender,string 
                                                  jsonDataString)
        {
            if (jsonDataString is not null && sender is not null)
            {
                // Deserialize the JSON string to a JsonData object
                JsonData receivedJsonData = JsonConvert.DeserializeObject<JsonData>(jsonDataString);

                // Update the JsonData property
                JsonData = receivedJsonData;
            }
        }

编辑

请注意,当前代码描述了用户控件与其 WPF 宿主之间的紧耦合,稍后我将进行此更改并介绍使用 Unity 容器以确保两者之间的松耦合。

c# wpf events event-handling viewmodel
© www.soinside.com 2019 - 2024. All rights reserved.