我正在測驗一些功能,以了解在 Windows 表單應用程式中托管 Blazor 的可能性。解決方案是檔案中的一個,經典計數器。現在我正在嘗試在 windows 和 blazor 應用程式之間交換資料,它基于這篇文章作業:如何互動 BlazorWebView 和 Windows 表單
具體來說,如果我稱之為:
blazorWebView1.RootComponents.Add<Counter>("#app", new Dictionary<string, object> { { "dummy", "222" } });
我可以看到組件內部的引數并使用它的值。
但是我無法使用在組件內部觸發并在主表單中攔截的回呼。
這是回呼宣告
[Parameter]
public EventCallback Callback { get; set; }
在 Windows 表單中
public async Task DoSomething()
{
//anything here
}
以及將方法傳遞給組件
blazorWebView1.RootComponents.Add<Counter>("#app", new Dictionary<string, object> { { "Callback",()=> DoSomething() } });
我使用了同一事物的幾種變體,但總是出錯。在這種情況下
無法將型別為“System.Func`1[System.Threading.Tasks.Task]”的物件轉換為型別“Microsoft.AspNetCore.Components.EventCallback”。
uj5u.com熱心網友回復:
事件回呼
如果您定義了EventCallback型別的引數:
private async void IncrementCount()
{
currentCount ;
await Callback.InvokeAsync();
}
[Parameter]
public EventCallback Callback { get; set; }
然后你可以像這樣傳遞它:
blazorWebView1.RootComponents.Add<Counter>("#app",
new Dictionary<string, object?>
{
{"Callback", new EventCallback(null, ()=>{ MessageBox.Show("Hi"); }) }
});
行動
如果您定義了Action型別的引數:
private void IncrementCount()
{
currentCount ;
Callback?.Invoke();
}
[Parameter]
public Action Callback { get; set; }
然后你可以像這樣傳遞它:
blazorWebView1.RootComponents.Add<Counter>("#app",
new Dictionary<string, object?>
{
{"Callback", ()=>{ MessageBox.Show("Hi"); } }
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517682.html
標籤:表格西装外套混血儿
