2015-04-26 25 views
2

将HubPage部分中定义的视图绑定到相应的ViewModels需要什么流程?使用CaliburnMicro在HubPage中绑定ViewModel

<Hub Header="{Binding HubHeader}" > 
    <HubSection x:Name="NewestOffers" Header="{Binding NewestOffersHeader}" IsHeaderInteractive="True" > 
     <DataTemplate > 
      <local:NewestOffersView DataContext="{Binding NewestOffers}"/> 
     </DataTemplate> 
    </HubSection> 

    <HubSection Header="{Binding SearchHeader}" IsHeaderInteractive="True" > 
     <DataTemplate x:Name="SearchView"> 
      <local:SearchView/> 
     </DataTemplate> 
    </HubSection> 

    <HubSection Header="{Binding AddOfferHeader}" IsHeaderInteractive="True" > 
     <DataTemplate> 
      <local:AddOfferView/> 
     </DataTemplate> 
    </HubSection> 

    <HubSection Header="{Binding AccountHeader}" IsHeaderInteractive="True"> 
     <DataTemplate> 
      <local:AccountView/> 
     </DataTemplate> 
    </HubSection> 
</Hub> 

我都创造了的ViewModels,如NewestOffersViewModel,SearchViewModel等,但它没有得到约束。我不忘记在容器配置中注册它们。

@Edit: 用于容纳所述轮毂的页面视图模型:

public class MainPageViewModel : PropertyChangedBase 
{ 
    public string HubHeader 
    { 
     get { return "Second Hand Bookshop"; } 
    } 
    public SearchViewModel SearchView { get; set; } 
    public NewestOffersViewModel NewestOffersViewModel { get; set; } 
    public MainPageViewModel() 
    { 
     SearchView = new SearchViewModel(); 
     NewestOffersViewModel = new NewestOffersViewModel(); 
    } 
    public string SearchSectionHeader 
    { 
     get { return "Search"; } 
    } 

而片MainPageView的(我试图兵NewestOffersView到NewestOffersViewModel)。

<Hub Header="{Binding HubHeader}" > 
    <HubSection Header="{Binding NewestOffersHeader}" IsHeaderInteractive="True" > 
     <DataTemplate > 
      <ContentControl x:Name="NewestOffersViewModel" /> 
     </DataTemplate> 
    </HubSection> 

回答

2

好的,所以我得到了这个工作。 MainPageView:

<Hub Header="{Binding HubHeader}" > 
    <HubSection Header="{Binding NewestOffersHeader}" IsHeaderInteractive="True" > 
     <DataTemplate > 
      <local:NewestOffersView DataContext="{Binding NewestOffersViewModel}" /> 
     </DataTemplate> 
    </HubSection> 

    <HubSection Header="{Binding SearchHeader}" IsHeaderInteractive="True" > 
     <DataTemplate x:Name="SearchView"> 
      <local:SearchView DataContext="{Binding SearchViewModel}"/> 
     </DataTemplate> 
    </HubSection> 

    <HubSection Header="{Binding AddOfferHeader}" IsHeaderInteractive="True" > 
     <DataTemplate> 
      <local:AddOfferView DataContext="{Binding AddOfferViewModel}"/> 
     </DataTemplate> 
    </HubSection> 

    <HubSection Header="{Binding AccountHeader}" IsHeaderInteractive="True"> 
     <DataTemplate> 
      <local:AccountView DataContext="{Binding AccountViewModel}"/> 
     </DataTemplate> 
    </HubSection> 
</Hub> 

MainPageViewModel:

public class MainPageViewModel : PropertyChangedBase 
{ 
    public string HubHeader 
    { 
     get { return "Second Hand Bookshop"; } 
    } 
    public SearchViewModel SearchViewModel { get; set; } 
    public NewestOffersViewModel NewestOffersViewModel { get; set; } 
    public AddOfferViewModel AddOfferViewModel { get; set; } 
    public AccountViewModel AccountViewModel { get; set; } 
    public MainPageViewModel() 
    { 
     SearchViewModel = new SearchViewModel(); 
     NewestOffersViewModel = new NewestOffersViewModel(); 
     AddOfferViewModel = new AddOfferViewModel(); 
     AccountViewModel = new AccountViewModel(); 
    } 

现在看来很明显,但前面我认为,意见将得到解决相同的自动方式MainPageView。

@Henk Holterman说

使用在一个DataTemplate一个用户控件的抛出过我一点点。

但我无法获得带有内容控制的版本,无法正常工作......对不起。 xd

相关问题