2017-02-21 11 views
1

私はWPFは二回

は私application.But WindowsFormHostにWindowsFormHostにバインドするMVVMアプリケーションを開発していますと呼ばれるcontentcontrol.childへの結合はdependancypropertyではありません。

私のビューモデルでは、新しいWindowsFormHostを作成し、それをcontentcontrolの子にバインドします。しかし、私はプログラムを実行するときにそのバインディングが2回呼び出されました。

私の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 
    } 
} 

答えて

0

以下が含まれています。それは良いアイデアとなるシナリオはごくわずかですが、あなたの場合はそうではありません。

すぐに問題を解決することはできません。たとえば、次のプロパティのゲッターが呼ばれる最初の時間まで、オブジェクトの作成を延期しますが、その後は常に同じ値を返します

private readonly Lazy<WindowsFormsHost> _myWindow = 
    new Lazy<WindowsFormsHost>(() => new WindowsFormsHost() { Child = newWindow }); 

public WindowsFormsHost myWindow 
{ 
    get { return _myWindow.Value; } 
} 

しかし、それはあなたのより広い問題を本当に解決するものではありません。なぜあなたはこのコードが有用だと思うかを理解するのに十分な文脈はありませんが、あなたが本当に望むコードであるとは思えません。

ビューモデルはビューオブジェクトを作成しないでください。ほかのビューコンポーネントと同様に、WindowsFormsHostをXAMLに宣言することができます。

ContentControlの子としてWindowsFormsHostコンポーネントを含めることも意味がありません。これは完全に有効なコントロールであり、コンテナは必要ありません。

この回答は、あなたが求めている特定の問題に対処する必要があります。しかし、私は強くあなたのデザインを考え直すことをお勧めします。それはすべて間違っているようです。あなたが実際に解決しようとしているより広い目標を正確に示す十分な詳細を持つ良い[mcve]を含む新しい質問を投稿してください。 suggestion.Yeahピーターのため

+0

おかげで私はそれが私のMVVMアプリケーションimplementation.In与えられた私は解決策としてのWPFにWindowsFormsHostを使用していwinforms.Soのための唯一のサポートSDKを統合したい私には意味がありません知っていますしかし、私はビューステートを更新する再利用可能なコンポーネントが必要なので、ビュー内でSDKロジックを定義することはお勧めできません。 – user3559351