2010-11-29 19 views
2

Silverlight控件我有在我加載控件的Silverlight頁面。這個控件有自己的viewmodel,我通過構造函數將它傳遞給.xaml.cs文件。但是編譯時出現錯誤。這是錯誤:加載具有自定義構造函數

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

我的主頁,使這樣的

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

在我MainPage.xaml中的「SearchFlyOutWin」參考我試圖加載控件這樣

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

我的SearchFlyOutWin.xaml.cs中的構造函數是這樣的

public SearchFlyOutWin(ISearchFlyoutViewModel viewmodel) 
    { 
     InitializeComponent(); 
     DataContext = viewmodel; 
    } 

我得到了我的MainPage.xaml.cs中上述錯誤時,它調用的InitializeComponent();方法。

我想我可能需要直接的CLR來調用正確的構造在這裏這條線加載searchwin當低於

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

如何糾正這種任何想法? ...謝謝你的時間。

回答

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,並沒有發現!

一個soution是,從構造函數中刪除參數,並在XAML定義你的模型作爲資源,然後在DataContext設置它。像這樣,

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

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

希望它解決了您的問題。

+0

不是直接。我的視圖模型也有一個構造函數。它試圖加載veiw模型時開始給構造函數未發現錯誤。我刪除了參數並將其設置爲默認常量來解決這個問題。但現在我有另一個問題。我希望將此控件設置爲默認情況下不可見,並且僅當我更改爲位於mainpage.xaml上的listbox中的特定值時纔可見。在mainpage.xaml中設置UC的數據上下文或者在mainpage.xaml.cs中編程設置數據上下文會導致控件始終可見。我現在無法隱藏它。有任何想法嗎? – user20358 2010-11-30 10:23:56

0

如果你正致力於通過視圖模型對象的構造函數(我不認爲這是一件壞事),只有這樣,我發現這樣做是爲了在代碼中創建對象,然後以編程方式將其添加到其父面板。在代碼中設置綁定也是可能的,但語法比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類將在視圖以外的另一個命名空間中。

相關問題