我试图将一些数据绑定到一个gridview,然后在最后有一个button(类似于Windows 8上的MSN财经应用程序)。
我将如何实现这一目标?
我当前的xaml代码:
<DataTemplate> <GridView x:Name="StopGridViewItem" ItemsSource="{Binding}" Margin="0,20,20" AutomationProperties.AutomationId="ItemGridView" AutomationProperties.Name="Items In Group" ItemTemplate="{StaticResource Standard310x260ItemTemplate}" SelectionMode="None" IsSwipeEnabled="false" IsItemClickEnabled="True" ItemClick="StopGridViewItem_ItemClick"> </GridView> </DataTemplate>
glGenFramebuffers或glGenFramebuffersEXT?
连续调用mmap,任何caching?
C#语音识别 – 识别语音和执行任务
程序加载/执行
设置Windowsnetworking映射的标签
提前致谢!
编译用于64位系统上的32位系统崩溃的C#程序和C ++ DLL
什么是Mcrt1.o和Scrt1.o的用法?
确保程序在terminal
为什么从一个linux模块读取字符,而不是整个string
处理这种情况有很多种方法。
如果您正在处理一个简单的列表,而不是像我们在屏幕截图右侧看到的动态镶嵌,则可以简单地在列表后面放置一个按钮,使其看起来像列表中的一个项目。 当处理不自动滚动的列表并且是语义最好的解决方案时,这非常有效。
<DataTemplate> <StackPanel> <ItemsControl x:Name="StopGridViewItem" ItemsSource="{Binding}" ItemTemplate="{StaticResource Standard310x260ItemTemplate}"> </ItemsControl> <Button ... /> </StackPanel> </DataTemplate>
如果您需要支持滚动,或正在处理的控件不能像马赛克那样简单地按下按钮,则需要在集合中添加一个虚拟项目,并将其绑定到列表。 如果列表虚拟化不是问题,那么您可以简单地将它附加到收集器内部的转换器中。 如果您需要支持虚拟化,那么这不是一个解决方案。 您将需要一个自定义控件来处理这种情况。
最后,一旦虚拟物品被插入列表中,当在视图中生成物品时,可以使用DataTemplateSelector在普通模板和虚拟模板之间切换。
public static class EnumerableExtensions { public static IEnumerable Append(this IEnumerable source,object o) { foreach (var x in source) { yield return x; } yield return o; } } public class DummyInserter : IValueConverter { public object Convert(object value,Type targettype,object parameter,CultureInfo culture) { var source = value as IEnumerable; if (source == null) throw new UnsupportedException("DummyInserter converter requires an IEnumerable source"); return source.Append(new Dummy()).ToArray(); } }
而对于XAML:
<Resources> <DummyInserter x:key="AddButtonDummyInserter" /> <DummyTemplateSelector x:key="MySelector" DefaultTemplate="{StaticResource Standard310x260ItemTemplate}" DummyTemplate="{StaticResource 310x260AddButtonTemplate}" /> </Resources> <DataTemplate> <StackPanel> <ItemsControl x:Name="StopGridViewItem" ItemsSource="{Binding,Converter={StaticResource AddButtonDummyInserter}}" ItemTemplateSelector="{StaticResource MySelector}"> </ItemsControl> <Button ... /> </StackPanel> </DataTemplate>
把它添加到ObservableCollection<T> ,无论GridView的ItemsSource绑定到什么地方。
如果Footer和GridRow不够用。 然后你可以通过使用ItemTemplateSelector来实现更复杂的方式
<Page.Resources> <DataTemplate x:Key="AddTemplate"> <Button Command="{Binding}" Content="{Binding Title}" Height="100" MinHeight="100" Width="100" MinWidth="100"/> </DataTemplate> <DataTemplate x:Key="DefaultTemplate"> <Border BorderThickness="1" BorderBrush="Red"> <StackPanel Height="100" MinHeight="100" Width="100" MinWidth="100"> <TextBlock Text="{Binding Artist}"></TextBlock> <TextBlock Text="{Binding Song}"></TextBlock> </StackPanel> </Border> </DataTemplate> <local:MyTemplateSelector x:Key="MyTemplateSelector" AddTemplate="{StaticResource AddTemplate}" DefaultTemplate="{StaticResource DefaultTemplate}"></local:MyTemplateSelector> </Page.Resources> <GridView x:Name="myGV" ItemTemplateSelector="{StaticResource MyTemplateSelector}"></GridView>
public class MyTemplateSelector : DataTemplateSelector { public DataTemplate AddTemplate { get; set; } public DataTemplate DefaultTemplate { get; set; } protected override Windows.UI.Xaml.DataTemplate SelectTemplateCore(object item,Windows.UI.Xaml.DependencyObject container) { if (item is sample_model) { return DefaultTemplate; } else { return AddTemplate; } } }
基本上你可以添加尽可能多的models到你想要的GridView.Items ,它所做的只是检查它是什么模型类型,如果它是sample_model(你的模型)它将使用默认模板,但如果它不是默认模型,然后使用AddTemplate(这是一个按钮)
示例输出使用(Artrist / Song)的sample_model和仅具有Title属性的非默认模型
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。