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 得 ...
随机推荐
- python 子类继承父类属性及实例化方法
- 如何手动解析CrashLog
http://www.cocoachina.com/ios/20150803/12806.html 解决崩溃问题是移动应用开发者最日常的工作之一.如果是开发过程中遇到的崩溃,可以根据重现步骤调试,但线 ...
- iOS 内存管理arc
http://www.tekuba.net/program/346/ ios自动释放池(autoreleasepool #import <Foundation/Foundation.h> ...
- Spring data jpa hibernate:查询异常java.sql.SQLException: Column '列名' not found
使用spring boot,jap,hibernate不小心的错误: java.sql.SQLException: Column '列名' not found: 这句话的意思是:找不到此列 为什么会出 ...
- COGS 775 山海经
COGS 775 山海经 思路: 求最大连续子段和(不能不选),只查询,无修改.要求输出该子段的起止位置. 线段树经典模型,每个节点记录权值和sum.左起最大前缀和lmax.右起最大后缀和rmax.最 ...
- python元组和range
1.元组 1)元组介绍 元组: 俗称不可变的列表.⼜被成为只读列表, 元组也是python的基本数据类型之⼀, ⽤⼩括号括起来, ⾥⾯可以放任何数据类型的数据, 查询可以. 循环也可以. 切片也可以. ...
- 3331: [BeiJing2013]压力
3331: [BeiJing2013]压力 LCA+树上差分,和之前类似的题差不多,就是多了个v-dcc缩点,唯一要注意的就是判断是否是割点,对于不是割点的点,如果他是起点或重点,ans++,和差分没 ...
- TP-admin即基于ThinkPHP5拿来即用高性能后台管理系统
TP-Admin即基于ThinkPHP5的web后台管理系统(总结一套自己的后台管理系统,方便自己后续的项目开发.) 主要特性:自适应手机端.支持国际化.吸取其他CMF框架优点.多站点部署.日志记录. ...
- 在phpstudy中nginx伪静态配置
########################### #以下是虚拟主机配置 server { listen 80; server_name hzym.com; root "D:\phpst ...
- python命令之m参数 局域网传输
在命令行中使用python时,python支持在其后面添加可选参数. python命令的可选参数有很多,例如:使用可选参数h可以查询python的帮助信息: 可选参数m 下面我们来说说python命令 ...