【发布时间】:2013-03-20 18:30:32
【问题描述】:
我终于让我的枢轴控制在 wp8 应用程序中使用 MVVM 工作,但我仍然有一个关于绑定的问题,因为它可以工作,我可以接受它,我对结果不满意并且我试图理解为什么会这样。我的 DataContext MainViewModel 包含多个其他 ViewModel。
场景 1:
如果我在 Grid(布局)中定义 DataContext,并将数据透视表头的 itemsSource 分配给 QuickSearchTabs ViewModel 并且这可以构建,但是我在 pivotitem 中定义的列表框没有分配 QuickSearchButtons ViewModel没有建成。这是xaml代码:
<Grid x:Name="LayoutRoot" Background="Transparent" DataContext="{StaticResource MainViewModel}" >
<phone:Pivot x:Name="Pivot" ItemsSource="{Binding QuickSearchTabs}" FontSize="{StaticResource PhoneFontSizeSmall}" SelectedIndex="{Binding SelectedSearchTabIndex, Mode=TwoWay}">
<phone:Pivot.Title>
<TextBlock Text="My Search Options" />
</phone:Pivot.Title>
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<ContentControl Content="{Binding Name}" />
</DataTemplate>
</phone:Pivot.HeaderTemplate>
<phone:Pivot.ItemTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding QuickSearchButtons}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Content="{Binding Name}" Grid.Row="0">
</Button>
<TextBlock Text="{Binding Description}" Grid.Row="1">
</TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
</Grid>
场景 2:
如果我在网格(布局)中定义 DataContext 并在列表框标签中定义相同的 DataContext,它将构建我的标题和我的列表框,但它会多次调用分配给列表框的 ItemsSource 的 viewModel .确切地说,它将调用它的次数与我拥有的枢轴数相同。这是xaml代码:
<Grid x:Name="LayoutRoot" Background="Transparent" DataContext="{StaticResource CriteriaViewModel}" >
<phone:Pivot x:Name="Pivot" ItemsSource="{Binding QuickSearchTabs}" SelectedIndex="{Binding SelectedSearchTabIndex, Mode=TwoWay}" >
<phone:Pivot.Title>
<TextBlock Text="My Search Options" />
</phone:Pivot.Title>
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<ContentControl Content="{Binding Name}"/>
</DataTemplate>
</phone:Pivot.HeaderTemplate>
<phone:Pivot.ItemTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding QuickSearchButtons}" DataContext="{StaticResource CriteriaViewModel}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Content="{Binding Name}" Grid.Row="0">
</Button>
<TextBlock Text="{Binding Description}" Grid.Row="1">
</TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
</Grid>
如前所述,这是可行的,并且无论如何都不会影响我,因为始终会显示正确的数据。
我可以以某种方式看到正在发生的事情,但是为什么要为每个已定义的数据透视表头设置 ItemsSource。当然,唯一重要的就是曝光!
我不知道是否应该按照我使用它们的方式使用 Pivots。看来,从我目前所见,通常一个视图被分配给每个 PivotItem。这不是我希望我的解决方案起作用的方式!
我只想要大量用于以特定方式对事物进行分组的标题,并且每个标题下显示的内容都是动态构建的,但在同一视图上,即按钮和标签列表。
关于如何让场景 1) 工作以及如果我被场景 2 卡住,如何根据数据透视表头项目的数量阻止它被触发的任何想法?
谢谢。
【问题讨论】:
标签: xaml data-binding mvvm viewmodel model-binding