2010-05-12 27 views
3

我開始在MVVM模式中重寫我的整個silverlight商業應用程序;我的第一個停止點是這樣的:在Silverlight和MVVM中動態添加視圖

我有一個頁面(View1)與相應的ViewModel1(具有屬性'IEnumerable AllData');

現在,在這個視圖中,我想要有一個樹視圖控件,其中一個節點將被另一個視圖2填充;

我的問題是: 1.怎麼做? - 我無法通過AllData屬性循環,因爲它是異步加載的... - 因此我不知道要插入的View2的數量「 - 我不知道如何從ViewModel1(

  • 我需要ViewModel2財產 'MyDataEntity CURRENTDATA'?
    • 或者我可以從ViewModel1
    • 結合ALLDATA財產
  • 你能幫助我出?

    謝謝

    +0

    不ViewModel2需要訪問ALLDATA或只有一個特定的項目? – Stephan 2010-05-12 17:47:59

    +0

    ViewModel2應該需要的全部是AllData [index],它是MyDataEntity的一個實例,需要與View2控件綁定; 事情是,我需要以某種方式迭代通過AllData並生成/追加儘可能多的View2控件作爲AllData中的成員IEnumerable – dvox 2010-05-13 06:39:10

    回答

    1

    它聽起來像你試圖把主/從視圖放在一起? MasterView包含所有DetailView的TreeView。

    所以的ViewModels看起來像

    public class DataListViewModel 
    { 
        public DataDetailViewModel[] AllData {get;} 
    } 
    
    public class DataDetailViewModel 
    { 
        public Data Model {get;} 
        public DataListViewModel Parent {get;} 
    } 
    

    如果這或多或少是準確的,那麼你有一個非常簡單的前進道路你自己的,你需要做的是使視圖或視圖模型的選擇第一。

    通過查看第一選擇,您可以使用DataTemplate作爲TreeView來控制TreeViews Item。

    <DataTemplate x:Key="dataTemplate"> 
        <my:DataDetailView DataContext="{Binding Path=.}" /> 
    </DataTemplate> 
    

    只要確保您的視圖有一個默認的構造函數。

    使用ViewModel的第一個選擇,您將需要使用TemplateSelector根據設置的對象將正確的視圖拉出。這可能是最靈活的,因爲您可以使用基於Detail類的不同視圖。

    請參閱以下鏈接瞭解更多信息http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector