2012-06-19 123 views
15

我對MVVM和WPF比較陌生,我只想點頭向正確的方向發展。在WPF MVVM中動態添加控件

我正在使用動態搜索視圖,其中單擊按鈕應添加一個包含3個組合框和2個文本框的新行。我應該如何去做這件事?謝謝。

回答

44

,如果你真的想這樣做MVVM,試着去忘記 「我怎樣才能添加控件」。你不必,只是想想你的viewmodels - WPF爲你創建控件:)

在你的案例中可以說我們有一個SearchViewModel和一個SearchEntryViewmodel。

public class SearchEntryViewmodel 
{ 
    //Properties for Binding to Combobox and Textbox goes here 
} 


public class SearchViewModel 
{ 
    public ObservableCollection<SearchEntryViewmodel> MySearchItems {get;set;} 
    public ICommand AddSearchItem {get;} 
} 

到現在爲止您不必考慮usercontrols/view。在您的SearchView中,您創建一個ItemsControl並將ItemsSource綁定到MySearchItems。

<ItemsControl ItemsSource="{Binding MySearchItems}"/> 

你現在看到的所有ItemsControl中的(只是toString()方法ATM)的SearchEntryViewmodels的。

爲了滿足您的要求,以顯示與3Comboboxes每SearchEntryViewmodel等你只需要在你的資源來定義一個DataTemplate

<DataTemplate DataType="{x:Type local:SearchEntryViewmodel}"> 
    <StackPanel Orientation="Horizontal"> 
     <Combobox ItemsSource="{Binding MyPropertyInSearchEntryViewmodel}"/> 
     <!-- the other controls with bindings --> 
    </StackPanel> 
</DataTemplate> 

多數民衆贊成:)你從來沒有去想如何添加控件動態。你只需要添加新的SearchEntryViewmodel到你的集合。

這種方法被稱爲Viewmodel第一我認爲它是MVVM最簡單的方法。

+1

謝謝。在我搜索網絡時發現了這種方法。很高興知道我在正確的軌道上。 – spiritqueen

0

如果你是MVVM和WPF的新手,那麼有一個關於如何通過Jason Dollinger構建一個C#/ WPF/MVVM應用程序的精彩視頻教程,在這裏可以找到on lab49。他在這個驚人的視頻開發的所有源代碼也可用right here on lab49.

看完它後,你肯定沒有任何問題開發你的搜索視圖。

+0

該網站在我們的辦公室被封鎖。將盡量在家中打開。感謝您的好帖子的鏈接。 – spiritqueen

0

一種選擇是,您可以通過創建新實例在後端創建文本框和組合框。 但更好的選擇是,您可以創建一個包含您想要添加的所有texboxes和組合框以及您想要的格式的usercontrol。 創建完按鈕後,您可以創建此用戶控件的實例並將其設置在網格或任何其他控件中,方法是使用該控件的SetValue屬性。

如果您是WPF和MVVM的新手,請閱讀此博客以瞭解此內容。

https://radhikakhacharia.wordpress.com/2012/06/01/wpf-tutorial-3/

https://radhikakhacharia.wordpress.com/2012/02/13/model-view-viewmodel/

+0

也被阻止在我們的辦公室。稍後訪問。謝謝。 – spiritqueen