[英]WPF binding to contentcontrol.child called twice
我正在開發一個 MVVM 應用程序
我想在我的應用程序中綁定到 WindowsFormHost。但 WindowsFormHost 不是依賴屬性。
因此,在我的視圖模型中,創建一個新的 WindowsFormHost 並將其綁定到內容控件的子項。但是我在運行程序時遇到了兩次調用的綁定。
有什么建議??
我的 XAML
<Window x:Class="Demo.View.area"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Demo.View"
mc:Ignorable="d"
Title="area" Height="300" Width="300">
<ContentControl Content="{Binding myWindow}" />
</Window>
我的 viewModel.cs 包含以下實現
public WindowsFormsHost myWindow
{
get
{
return new WindowsFormsHost() { Child = newWindow };
//newWindow defined in another place
}
}
這里的根本問題是每次調用屬性 getter 時都會創建一個新對象。 在極少數情況下,這是一個好主意,當然也不是您的情況。
我們可以通過不這樣做來解決眼前的問題。 例如:
private readonly Lazy<WindowsFormsHost> _myWindow =
new Lazy<WindowsFormsHost>(() => new WindowsFormsHost() { Child = newWindow });
public WindowsFormsHost myWindow
{
get { return _myWindow.Value; }
}
這將推遲對象的創建,直到第一次調用屬性 getter,但之后將始終返回相同的值。
但這並不能真正解決您更廣泛的問題。 您的問題中沒有足夠的上下文來理解為什么您認為此代碼有用,但我認為它不太可能是您真正想要的代碼。
您的視圖模型根本不應該創建視圖對象。 您可以而且應該聲明WindowsFormsHost
在XAML和其子,就像你將任何其他視圖組件。
包含WindowsFormsHost
組件作為ContentControl
的子級也沒有意義。 它本身就是一個完全有效的控件,不需要容器。
此答案應解決您所詢問的具體問題。 但我強烈建議您重新考慮您的設計。 好像全錯了。 如果您需要這方面的幫助,請發布一個新問題,其中包含一個很好的 [mcve],其中包含足夠詳細的信息,可以准確顯示您實際嘗試解決的更廣泛的目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.