使用 CaliburnMicro 在 HubPage 中绑定 ViewModel
ViewModel binding in HubPage using 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>
我已经创建了所有 ViewModel,例如 NewestOffersViewModel、SearchViewModel 等,但它没有被绑定。而且我没有忘记在容器配置中注册它们。
@编辑:
包含中心的页面的视图模型:
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 部分(我正在尝试 bing NewestOffersView 到 NewestOffersViewModel)。
<Hub Header="{Binding HubHeader}" >
<HubSection Header="{Binding NewestOffersHeader}" IsHeaderInteractive="True" >
<DataTemplate >
<ContentControl x:Name="NewestOffersViewModel" />
</DataTemplate>
</HubSection>
好的,所以我开始工作了。
主页视图:
<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 说
The use of a UserControl in a DataTemplate throws me off a little.
但是我无法让带有内容控制的版本工作...抱歉。 xd
将 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>
我已经创建了所有 ViewModel,例如 NewestOffersViewModel、SearchViewModel 等,但它没有被绑定。而且我没有忘记在容器配置中注册它们。
@编辑: 包含中心的页面的视图模型:
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 部分(我正在尝试 bing NewestOffersView 到 NewestOffersViewModel)。
<Hub Header="{Binding HubHeader}" >
<HubSection Header="{Binding NewestOffersHeader}" IsHeaderInteractive="True" >
<DataTemplate >
<ContentControl x:Name="NewestOffersViewModel" />
</DataTemplate>
</HubSection>
好的,所以我开始工作了。 主页视图:
<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 说
The use of a UserControl in a DataTemplate throws me off a little.
但是我无法让带有内容控制的版本工作...抱歉。 xd