微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据绑定后如何添加项目?

我试图将一些数据绑定到一个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的用法

我的C ++代码编译,但成为一个无法运行的程序,不工作

确保程序在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] 举报,一经查实,本站将立刻删除。

相关推荐