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 就可以了

代码很简单,我就不写所有代码

代码:[免费]ListViewBindLastItem 1.0-CSDN下载

2018-2-13-win10-uwp-listView-绑定前一项的更多相关文章

  1. UWP ListView 绑定 单击 选中项 颜色

    refer: https://www.cnblogs.com/lonelyxmas/p/7650259.html using System; using System.Collections.Gene ...

  2. win10 uwp xaml 绑定接口

    本文告诉大家如何在 xaml 绑定属性使用显式继承接口 早上快乐 就在你的心问了我一个问题,他使用的属性是显式继承,但是无法在xaml绑定 我写了简单的代码,一个接口和属性 public class ...

  3. win10 uwp 商业游戏 1.1.5

    本文是在win10 uwp 商业游戏 基础上继续开发,添加一些无聊的游戏 因为在发布几个月,下载量很少,小伙伴说游戏就玩不到几分钟就不想玩,于是我就想加入其他游戏 下面我来告诉大家如何在游戏中添加多个 ...

  4. win10 uwp 列表模板选择器

    本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...

  5. win10 uwp 商业游戏

    本文告诉大家去做一个商业游戏,游戏很简单,几乎没有什么技术 游戏的开始,需要添加框架库,于是引用我自己写的库. 首先是创建一个启动页面,这个页面是显示启动的. 在显示启动的时候,是需要加载游戏需要使用 ...

  6. win10 uwp 如何使用DataTemplate

    这是数据模板,一般用在数组的绑定,显示数组中的元素. 假如我们有一个列表,列表里是书,包括书名.作者.还有出版,那么我们只有源信息,如何把它显示到我们的ListView,就需要DataTemplate ...

  7. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  8. Win10 UWP开发系列:实现Master/Detail布局

    在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...

  9. win10 uwp 毛玻璃

    毛玻璃在UWP很简单,不会和WPF那样伤性能. 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃. 毛玻璃可以使用 win2D 方法,也可以使用 Compositor . 使用 win2d 得 ...

随机推荐

  1. python 子类继承父类属性及实例化方法

  2. 如何手动解析CrashLog

    http://www.cocoachina.com/ios/20150803/12806.html 解决崩溃问题是移动应用开发者最日常的工作之一.如果是开发过程中遇到的崩溃,可以根据重现步骤调试,但线 ...

  3. iOS 内存管理arc

    http://www.tekuba.net/program/346/ ios自动释放池(autoreleasepool #import <Foundation/Foundation.h> ...

  4. Spring data jpa hibernate:查询异常java.sql.SQLException: Column '列名' not found

    使用spring boot,jap,hibernate不小心的错误: java.sql.SQLException: Column '列名' not found: 这句话的意思是:找不到此列 为什么会出 ...

  5. COGS 775 山海经

    COGS 775 山海经 思路: 求最大连续子段和(不能不选),只查询,无修改.要求输出该子段的起止位置. 线段树经典模型,每个节点记录权值和sum.左起最大前缀和lmax.右起最大后缀和rmax.最 ...

  6. python元组和range

    1.元组 1)元组介绍 元组: 俗称不可变的列表.⼜被成为只读列表, 元组也是python的基本数据类型之⼀, ⽤⼩括号括起来, ⾥⾯可以放任何数据类型的数据, 查询可以. 循环也可以. 切片也可以. ...

  7. 3331: [BeiJing2013]压力

    3331: [BeiJing2013]压力 LCA+树上差分,和之前类似的题差不多,就是多了个v-dcc缩点,唯一要注意的就是判断是否是割点,对于不是割点的点,如果他是起点或重点,ans++,和差分没 ...

  8. TP-admin即基于ThinkPHP5拿来即用高性能后台管理系统

    TP-Admin即基于ThinkPHP5的web后台管理系统(总结一套自己的后台管理系统,方便自己后续的项目开发.) 主要特性:自适应手机端.支持国际化.吸取其他CMF框架优点.多站点部署.日志记录. ...

  9. 在phpstudy中nginx伪静态配置

    ########################### #以下是虚拟主机配置 server { listen 80; server_name hzym.com; root "D:\phpst ...

  10. python命令之m参数 局域网传输

    在命令行中使用python时,python支持在其后面添加可选参数. python命令的可选参数有很多,例如:使用可选参数h可以查询python的帮助信息: 可选参数m 下面我们来说说python命令 ...