2010-11-29 11 views
2

私はコントロールをロードしているシルバーライトページを持っています。このコントロールには、コンストラクタを介して.xaml.csファイルに渡す独自のビューモデルがあります。コンパイル時にエラーが発生します。これはエラーです:カスタムコンストラクタでSilverlightコントロールをロードする

{No matching constructor found on type 'MySite.Views.SearchFlyOutWin'} 

私のメインページには、私はこの

<part:SearchFlyOutWin x:Name="searchFlyOutWin" Visibility="{Binding Converter={StaticResource BooleanToVisibilityConverter}, Path=IsSearchVisible}" /> 
のようなコントロールをロードしようとした私のMainPage.xamlをでこの

xmlns:part="clr-namespace:MySite.Views;assembly=MySite" 

LIKE「SearchFlyOutWin」を参照し、私SearchFlyOutWin.xaml.csで

コンストラクタはこの

public SearchFlyOutWin(ISearchFlyoutViewModel viewmodel) 
    { 
     InitializeComponent(); 
     DataContext = viewmodel; 
    } 
のようなものです

InitializeComponent()を呼び出すと、上記のエラーがMainpage.xaml.csに表示されます。方法。

私はおそらく

<part:SearchFlyOutWin x:Name="searchFlyOutWin" Visibility="{Binding Converter={StaticResource BooleanToVisibilityConverter}, Path=IsSearchVisible}" /> 

の下に、ここでこの行でこれを修正する方法上の任意のアイデアをsearchwinをロードするときに正しいコンストラクタを呼び出すためのCLRに指示する必要があると思いますか? ...御時間ありがとうございます。

答えて

2

I have a silverlight page in which I am loading a control. This control has its own viewmodel which I pass in to the .xaml.cs file thru its constructor. However I get an error when compiling. This is the error:

{No matching constructor found on type 'MySite.Views.SearchFlyOutWin'}

独自のコントロールのコンストラクタにパラメータが必要な場合は、このコントロールをXAMLで使用することはできません。 XAMLでは、すべてのコントロールにはのコンストラクタがである必要があります。それはエラーメッセージ示す理由、すなわち{タイプに見出さ一致するコンストラクタを「MySite.Views.SearchFlyOutWin」}XAMLパーサーは、SearchFlyOutWin呼ばコントロールでないパラメータとコンストラクタを検索し、それがどれも見つからなかったので!

1つの理由は、コンストラクタからパラメータを削除し、リソースとしてXAMLにモデルを定義し、DataContextにそのモデルを設定することです。このように、

<Window.Resources> 
     <local:SearchFlyoutViewModel x:Key="model"/> 
</Window.Resources> 

<part:SearchFlyOutWin DataContext="{StaticResource model}"/> 

希望、問題を解決します。

+0

私のビューモデルにもコンストラクタがありました。veiwモデルを読み込もうとしたときにコンストラクタにエラーが見つかりませんでした。私はparamsを削除し、それを修正するためにconstをデフォルトに設定しました。しかし、今私は別の問題があります。このコントロールは、デフォルトでは非表示に設定し、mainpage.xamlにあるリストボックス内の特定の値に変更する場合にのみ表示したいと考えています。 mainpage.xamlにUCのdatacontextを設定するか、mainpage.xaml.csにプログラムで設定すると、コントロールは常に表示されます。私は今それを隠すことができません。何か案は? – user20358

0

コンストラクタ内のオブジェクトにviewmodelを渡すことを約束している場合(私は悪いことではないと思いますが)、これを行うために私が見つけた唯一の方法は、それをプログラムによって親パネルに追加します。構文はXAML構文よりも複雑ですが、コード内にバインディングを設定することも可能です。コードは次のようになります。

SearchFlyOutWin searchFlyOutWin = new SearchFlyOutWin(viewModel); 
Binding b = new Binding(""); 
b.Source = IsSearchVisible; 
b.Converter = new BooleanToVisibilityConverter(); 
searchFlyOutWin.SetBinding(SearchFlyOutWin.VisibilityProperty, b); 
SearchFlyOutWinParentPanel.Children.Add(searchFlyOutWin); 

ここで、SearchFlyOutWinParentPanelは、子を受け入れることができるパネルです。 XAMLでこれを行う別の方法がある場合は、それを見たいと思っていますが、まだ見つかりませんでした。

0

あなたはviewmodelクラスを公開する必要があるかもしれません。 あなたのviewmodelクラスはview以外の別の名前空間にあると思います。

関連する問題