2016-01-21 70 views
3

澄清 我正在使用MVVM解決方案。我有ViewModels和視圖之間的1到1映射。我所看到的所有解決方案都遵循第一種方法,即視圖類型由IoC容器解析並將ViewModel視爲依賴關係。我需要以某種方式反轉。如何使用Prism和Unity實現「View Model First」?

原帖:

目前我正在試圖重構從卡利微一個簡單的數據庫查看應用到棱鏡(我是很新的)。該應用程序當前使用ViewModel-First方法,並且ShellViewModel維護綁定到TabControl的ViewModel的列表。 我找不到如何在棱鏡中實現類似的方法。我見過的所有解決方案都使用視圖優先方法,但我有多個狀態都映射到一種視圖類型,並且需要將這些狀態分開。 Outline of application

有沒有一種方法可以配置棱鏡自動注入視圖時視圖模型分配給區域?

謝謝。

+2

我認爲你正在尋找使用隱式的DataTemplate。這只是一個在XAML中使用TargetType定義的DataTemplate,但不包含Key。在Visual Tree中遇到指定對象時,WPF將自動使用該DataTemplate繪製指定對象,例如,當它嘗試呈現其中ItemsSource設置爲ViewModels集合的TabControl時。如果需要,請參閱[這裏](http://stackoverflow.com/a/8645746/302677)。 – Rachel

回答

1

雷切爾向我指出她的意見,以原來的問題的解決方案。 我沒有嘗試實現特殊的棱鏡功能和棱鏡區域,而是使用DataTemplates實現了更直接的MVVM實現。

視圖模型輪廓:

public abstract class ContainerViewModel : BindableBase 
{ 
    public ObservableCollection<ItemViewModel> Items { get; set; } 
    public ItemViewModel ActiveItem { get; set; } 

    protected virtual void Add(ItemViewModel item) { ... } 
    protected virtual void Remove(ItemViewModel item) { ... } 
    protected virtual void Activate(ItemViewModel item) { ... } 
} 

和XAML:

<TabControl Grid.Column="1" ItemsSource="{Binding Items}" SelectedItem="{Binding ActiveItem}"> 
       <TabControl.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Table.TableName}" /> 
        </DataTemplate> 
       </TabControl.ItemTemplate> 
       <TabControl.ContentTemplate> 
        <DataTemplate DataType="{x:Type viewModels:QueryViewModel}"> 
         <local:QueryView /> 
        </DataTemplate> 
       </TabControl.ContentTemplate> 
      </TabControl> 
相關問題