2018-2-13-win10-uwp-listView-绑定前一项
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
win10 uwp listView 绑定前一项
|
lindexi
|
2018-2-13 17:23:3 +0800
|
2018-2-13 17:23:3 +0800
|
Win10 UWP
|
大神问,如何在 ListView 绑定前一项,于是我下面告诉大家如何在 ListView 绑定前一项
WPF 绑定前一项
可以使用绑定的 RelativeSource 就可以绑定前一项,请看代码
<ListView >
<ListViewItem>
<ListViewItem.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}"> </DataTrigger>
</Style.Triggers>
</Style>
</ListViewItem.Style>
</ListViewItem>
</ListView>
UWP 绑定前一项
如果需要在ListView 让每个项绑定前一个项的内容,那么就是本文要说的。
首先有一个数据的类,我新建一个 Foo
public class Foo : INotifyPropertyChanged
{
private string _name; public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged();
}
} public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
然后在界面做一个简单的列表,需要有两个TextBlock 一个绑定这一项的数据,一个绑定上一个项的数据
<ListView ItemsSource="{Binding Foo}">
<ListView.ItemTemplate>
<DataTemplate DataType="local:Foo">
<Grid>
<TextBlock Text="{Binding Name}" ></TextBlock>
<TextBlock x:Name="上一个的" Margin="10,100,10,10" Text="" ></TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
后台代码需要创建一个数据,但是这个数据我不会在运行添加
public ObservableCollection<Foo> Foo { get; set; } = new ObservableCollection<Foo>()
{
new Foo()
{
Name = "lindexi"
},
new Foo
{
Name = "csdn"
}
};
这样看起来就是简单的代码,但是如果需要绑定上一项就需要添加一个新类
假如从后台拿到一个 TextBlock ,那么如何从这个 TextBlock 拿到这个的 DataContext ,可以获得他上一级的,虽然从这里拿到也可以
var grid = (FrameworkElement) text.Parent;
var foo = (Foo) grid.DataContext;
那么如何从 Grid 拿到ListView ,如果拿到这个就可以拿到绑定的数据,所以就可以从绑定的数据拿到当前的上一项,然后绑定。
如果需要从 Grid 拿到 ListView ,简单的代码是一个循环
var temp = grid;
while (!(temp is ListView))
{
temp = (FrameworkElement) VisualTreeHelper.GetParent(temp);
}
这样就拿到了,那么拿到数据就可以绑定
var foo2 = (IEnumerable<Foo>) ((ListView) temp).ItemsSource;
var n = foo2.ToList();
if (n.IndexOf(foo) > 0)
{
Binding bind = new Binding("Name")
{
Source = n[n.IndexOf(foo) - 1],
};
BindingOperations.SetBinding(text, TextBlock.TextProperty, bind);
};
一开始如何拿到 TextBlock ,可以使用一个附加属性来拿
public static readonly DependencyProperty FooProperty = DependencyProperty.RegisterAttached(
"Foo", typeof(object), typeof(Foo1), new PropertyMetadata(default(object), FooPropertyChangedCallback)); public static void SetFoo(DependencyObject element, object value)
{
element.SetValue(FooProperty, value);
} public static object GetFoo(DependencyObject element)
{
return (object) element.GetValue(FooProperty);
} <Grid>
<TextBlock Text="{Binding Name}" ></TextBlock>
<TextBlock x:Name="上一个的" Margin="10,100,10,10" Text="" local:Foo1.Foo="{Binding RelativeSource={RelativeSource Self}}"></TextBlock>
</Grid>
然后把代码写到 FooPropertyChangedCallback 就可以了
代码很简单,我就不写所有代码
2018-2-13-win10-uwp-listView-绑定前一项的更多相关文章
- UWP ListView 绑定 单击 选中项 颜色
refer: https://www.cnblogs.com/lonelyxmas/p/7650259.html using System; using System.Collections.Gene ...
- win10 uwp xaml 绑定接口
本文告诉大家如何在 xaml 绑定属性使用显式继承接口 早上快乐 就在你的心问了我一个问题,他使用的属性是显式继承,但是无法在xaml绑定 我写了简单的代码,一个接口和属性 public class ...
- win10 uwp 商业游戏 1.1.5
本文是在win10 uwp 商业游戏 基础上继续开发,添加一些无聊的游戏 因为在发布几个月,下载量很少,小伙伴说游戏就玩不到几分钟就不想玩,于是我就想加入其他游戏 下面我来告诉大家如何在游戏中添加多个 ...
- win10 uwp 列表模板选择器
本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...
- win10 uwp 商业游戏
本文告诉大家去做一个商业游戏,游戏很简单,几乎没有什么技术 游戏的开始,需要添加框架库,于是引用我自己写的库. 首先是创建一个启动页面,这个页面是显示启动的. 在显示启动的时候,是需要加载游戏需要使用 ...
- win10 uwp 如何使用DataTemplate
这是数据模板,一般用在数组的绑定,显示数组中的元素. 假如我们有一个列表,列表里是书,包括书名.作者.还有出版,那么我们只有源信息,如何把它显示到我们的ListView,就需要DataTemplate ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- Win10 UWP开发系列:实现Master/Detail布局
在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...
- win10 uwp 毛玻璃
毛玻璃在UWP很简单,不会和WPF那样伤性能. 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃. 毛玻璃可以使用 win2D 方法,也可以使用 Compositor . 使用 win2d 得 ...
随机推荐
- KiCad EDA 5.1.4 发布了
KiCad EDA 5.1.4 发布了 KiCad EDA 自豪地宣布 KiCad 5 系列最新稳定版发布.5.1.4 稳定版修复了来自 5.1.2 和 5.1.3 版本的关键错误修复和其他一些小改进 ...
- Mysterious Antiques in Sackler Museum(判断长方形)
题目链接 参考博客Ritchie丶的博客 - UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形) 题意:大概意思就是判断四个矩形能不能 ...
- bzoj4152 The Captain
Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. Input 第一行包含一个正整数n(2 ...
- 如何将英文PDF文献翻译成中文
方法一:利用Google的本地文档翻译功能 这种方法比较简单,打开Google翻译首页http://translate.google.cn/, 选择"上传文档" 选择文件,开始翻译 ...
- 给图片加ALT属性是个什么意思?有什么优点呢
使用百度统计的seo建议当中一条图片ALT信息"存在没有alt信息的img标签"扣分较多.站点图片中加入ALT对seo有什么优点呢?这是非常多初学seo的朋友们都须要询问的问题.a ...
- ORACLE学习笔记-ORACLE(基本命令)
--查看VGA信息: show sga; select * from v$sgastat;--可以通过以下几个动态性能视图查看信息: V$sysstat 系统统计信息 V ...
- @noi.ac - 442@ 牛羊被他抢了
目录 @description@ @solution@ @accepted code@ @details@ @description@ 众所周知小G热衷于搏弈,有一天他来到你的大草原上,抢走了你所有的 ...
- Laravel 5.3 用户验证源码探究 (一) 路由与注册
https://blog.csdn.net/realghost/article/details/52558962 简介 Laravel 从 5.2 开始就有了开箱即用的用户验证,5.3 又在 5.2 ...
- Pytorch实现MNIST(附SGD、Adam、AdaBound不同优化器下的训练比较) adabound实现
学习工具最快的方法就是在使用的过程中学习,也就是在工作中(解决实际问题中)学习.文章结尾处附完整代码. 一.数据准备 在Pytorch中提供了MNIST的数据,因此我们只需要使用Pytorch提供 ...
- Java反射机制(五):使用反射增强简单工厂设计模式
关于简单工厂设计模式的讲解,可参考博文<设计模式: 简单工厂模式>,此处不再介绍: 我们先观察之前介绍的关于简单工厂: public class OperateFactory { pub ...