- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 LongListSelector 来实现我的项目的列表或网格显示。为此,我创建了一个 DataTemplateSelector 并在运行时更改了 LayoutMode 属性。这是可行的,但 DataTemplateSelector 似乎存在问题。如果我最初启动页面,DataTemplateSelector 会为我的三个项目调用三次。当我导航到另一个页面(设置页面以更改 LayoutMode)然后返回时,DataTemplateSelector 仅被称为两个项目,但仍然有三个项目。
数据模板选择器:
public abstract class DataTemplateSelector : ContentControl
{
public virtual DataTemplate SelectTemplate(object item, DependencyObject container)
{
return null;
}
protected override void OnContentChanged(object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);
ContentTemplate = SelectTemplate(newContent, this);
}
}
ItemViewModeTemplateSelector:
public class ItemViewModeTemplateSelector: DataTemplateSelector
{
public DataTemplate ListViewModeTemplate
{
get;
set;
}
public DataTemplate GridViewModeTemplate
{
get;
set;
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
ViewMode viewMode = ViewMode.Grid;
// Get ViewMode from IsolatedStorageSettings...
switch (viewMode)
{
case ViewMode.Grid:
return GridViewModeTemplate;
case ViewMode.List:
return ListViewModeTemplate;
}
return base.SelectTemplate(item, container);
}
}
主页.xaml:
<phone:LongListSelector x:Name="ItemLongListSelector" ItemsSource="{Binding Items}" LayoutMode="Grid" GridCellSize="222,222">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<common:ItemViewModeTemplateSelector Content="{Binding}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<common:ItemViewModeTemplateSelector.GridViewModeTemplate>
<DataTemplate>
<StackPanel Margin="12,12,0,0" Background="{Binding Color, Converter={StaticResource ColorToBrushConverter}}">
<!-- Content -->
</StackPanel>
</DataTemplate>
</common:ItemViewModeTemplateSelector.GridViewModeTemplate>
<common:ItemViewModeTemplateSelector.ListViewModeTemplate>
<DataTemplate>
<StackPanel>
<!-- Content -->
</StackPanel>
</DataTemplate>
</common:ItemViewModeTemplateSelector.ListViewModeTemplate>
</common:ItemViewModeTemplateSelector>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
这是我最初启动页面时的显示:
然后我导航到另一个页面然后返回:
编辑:我为此问题准备了一个示例项目。它应该可以正常运行。
最佳答案
我还没有找到解决方案,但也许可以为解决问题的人提供线索。
我认为问题在于 LongListSelector.UpdateLayout() 方法 - 当它第一次被触发时,没有 LLS 绑定(bind)到的项目 - OnChangeMethod 被称为 Itemsource.Count 多次。但是当我们离开页面并返回时 - LLS 被更新并且调用方法省略中间元素。
这意味着它适用于偶数个项目 - OnChangeMethod 被调用正确次数,但对于奇数个项目 - 它被称为项目数 - 1.
第二件事是为什么它被调用 - 当没有变化时。
我还添加了一个 code研究哪个(非常简单)。
关于c# - LongListSelector 和 DataTemplateSelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690789/
在两个之间切换 ItemTemplates在我的 ListView基于当前的 Item 类型,我实现了一个 DataTemplateSelector .我是通过 Binding 添加的到 ListVi
我有一个应用于 DataGridTemplateColumn 的 DataTemplateSelector。它正确地为我提供了一个 DataTemplate,该模板根据我的 DataRow(在其他列中
使用 dataTemplateSelector 根据枚举值为我的 View 模型选择正确的数据模板时遇到一点问题。 这是一个重现问题的演示。 我有一个由我的 viewModels 使用的模型层次结构
我有 ContentPresenter 和 DataTemplateSelector: ... public override DataTemplate SelectTemplate(
我正在使用带有 ModelView-First 方法的 MVVM 模式。到目前为止,这工作正常。 现在我有一个用户控件( View ),它应该根据位于我的 ViewModel 中的属性显示各种内容。
我在列表框中使用 DatatemplateSelector。 我的数据没有按需拉伸(stretch)(灰色圆圈必须在列表框的右侧)
我的应用中需要一个数据模板选择器。我找到了 this blog在 7.0 上效果很好。将我的项目升级到 7.1 后,设置模板时出现“未指定错误”。我试着把他们在博客上发布的示例项目升级到芒果,它仍然有
我正在使用 LongListSelector 来实现我的项目的列表或网格显示。为此,我创建了一个 DataTemplateSelector 并在运行时更改了 LayoutMode 属性。这是可行的,但
这是我拥有的 XAML: 这是我的 ListTemplateSelector 类: public class ListTemplateSelector : DataTemplateSelector
我将 ContentControl.DataTemplateSelector 设置为我想要的。 我希望根据命令或其他方式调用 ContentControl 以通过 xaml 或代码从选择器中重新选择模
我想设计一个 DataTemplateSelector,它将给定值与传入的参数进行比较,并在值优劣时选择正确的模板 我带来了以下内容: class InferiorSuperiorTemplateSe
如何更改 UWP 项目中 ListView 的 SelectedItem 的 DataTemplate?我正在尝试使用 DataTemplateSelector,但问题是 SelectTemplate
走出我的 .net 踩踏地,似乎无法弄清楚是否有与您在 .net 中使用 DataTemplateSelector 的等效项,但用于 ionic 驱动的 html5 和 angularjs 元素。有人
我正在制作一个自定义的水平滚动 ListView 类型控件,我遇到了一个我无法解释的问题,而且我不能 100% 确定这个问题是否与我的代码有关,除非我误会了什么。 我已将问题提炼成最简单的形式,可在
我知道有这个帖子:How to find a resource in a UserControl from a DataTemplateSelector class in WPF? 问同样的问题。 但
我有一个使用 StackPanel 的 ItemsControl 来显示项目列表。 我希望每行都显示一个标签,但标签左侧的内容由 DataTemplateSelector 定义。我不想为 Templa
我正在尝试构建一个 ContentControl -派生控件(我们称之为 MyContentControl ),它将有其 ControlTemplate由 DataTemplateSelector 的
我有两个列表框,默认的和自定义的。一个正确使用 DataTemplateSelector 而另一个只使用默认的 DataTemplates 从不调用选择器; //shows correctly //
我有一个动态数据透视项模板,如下所列:
我有一个简单的问题。我的 Xamarin Forms 页面上定义了两个数据模板。我想在按下按钮时将一个换成另一个。我知道使用 ListView 我可以使用 ItemTemplate 并绑定(bind)
我是一名优秀的程序员,十分优秀!