MVVM模式下 DataTemplate 中控件的绑定

简介: 原文:MVVM模式下 DataTemplate 中控件的绑定  今天给ListBox中通过DataTemplate生成的Button绑定命令时,一开始Button始终找不到绑定的命令。现找到了正确的绑定方式,特来记录一下。
原文: MVVM模式下 DataTemplate 中控件的绑定

  今天给ListBox中通过DataTemplate生成的Button绑定命令时,一开始Button始终找不到绑定的命令。现找到了正确的绑定方式,特来记录一下。

  先上个正确的示例: 

<ListBox Grid.Column="0" ItemsSource="{Binding CallBussiness}">
    <ListBox.ItemsPanel>
         <ItemsPanelTemplate>
                <WrapPanel HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal" />
         </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
<TextBlock Text="{Binding Property1}"/> <Button VerticalAlignment="Top" HorizontalAlignment="Left" Margin="25,0,0,0" Command="{Binding Path=DataContext.HandUpCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}" CommandParameter="{Binding}"/> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ListBox>

因为使用DataTemplate时,ListBoxItem的DataContext将是ItemsSource绑定的列表的项,其类型就是列表中的单个Model。所以不能使用默认的绑定源,而要使用相对源(RelativeSource)。并且MVVM模式下,VM一般都是绑定窗口到DataContext,窗口中的控件再继承(可能这个词不是很准确)窗口的DataContext,因此指定相对源后,Path还需要从DataContext属性开始找想要的命令。如上面的Button,不能直接Path=HandUpCommand,因为HandUpCommand不是直接存在ListBox中的。

目录
相关文章
|
C#
【WPF】CommandParameter解决多传参问题
原文:【WPF】CommandParameter解决多传参问题 方法一:传参按钮控件自身绑定的ItemSource 用WAF框架实现MVVM,按钮的点击事件都要通过Command来传递到这个View对应的ViewModel上,再通过ViewModel传递到上层的Controller层,在Controller层通过DelegateCommand处理按钮真正的事件。
3947 1
|
边缘计算 人工智能 负载均衡
什么是SD-WAN?
【4月更文挑战第15天】
8680 5
|
C#
WPF技术之Window.Resources
Window.Resources是在WPF中用于声明和定义资源的机制。通过将资源放置在Window.Resources中,我们可以在窗口内的任何位置引用这些资源,从而实现资源的共享和重用。
1402 0
|
C# Windows
【WPF】自动完成/智能提示的文本框(AutoCompleteBox)
原文:【WPF】自动完成/智能提示的文本框(AutoCompleteBox) 使用了插件WPFToolKit。(直接在Nuget中搜即可) 使用方法参考这篇文章: http://www.
2579 0
|
12月前
|
C#
.NET编程技巧:C#中字节与其他数据类型转换方法
在C#中将不同数据类型互相变更至二进制格式需要注意每种数据类型特定方法以及可能涉及特定系统资源比如内存流等。正确理解每种方法并选择最适合当前场景下最高效率且安全性高且易于维护代码方式至关重要。
489 13
|
C# UED 开发者
WPF与性能优化:掌握这些核心技巧,让你的应用从卡顿到丝滑,彻底告别延迟,实现响应速度质的飞跃——从布局到动画全面剖析与实例演示
【8月更文挑战第31天】本文通过对比优化前后的方法,详细探讨了提升WPF应用响应速度的策略。文章首先分析了常见的性能瓶颈,如复杂的XAML布局、耗时的事件处理、不当的数据绑定及繁重的动画效果。接着,通过具体示例展示了如何简化XAML结构、使用后台线程处理事件、调整数据绑定设置以及利用DirectX优化动画,从而有效提升应用性能。通过这些优化措施,WPF应用将更加流畅,用户体验也将得到显著改善。
1881 1
文件太大不能拷贝到U盘怎么办?实用解决方案全解析
当我们试图将一个大文件拷贝到U盘时,却突然跳出提示“对于目标文件系统目标文件过大”。这种情况让人感到迷茫,尤其是在急需备份或传输数据的时候。那么,文件太大为什么会无法拷贝到U盘?又该如何解决?本文将详细分析这背后的原因,并提供几个实用的方法,帮助你顺利将文件传输到U盘。
|
存储 开发框架 JavaScript
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
940 0
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
|
开发框架 缓存 .NET
【Entity Framework】EF中DbSet类详解
【Entity Framework】EF中DbSet类详解
525 1
【Entity Framework】EF中DbSet类详解
|
Android开发 iOS开发 C#
Xamarin.Forms:从零开始的快速入门指南——打造你的首个跨平台移动应用,轻松学会用C#和XAML构建iOS与Android通用界面的每一个步骤
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程并保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用演示了 Xamarin.Forms 的基本功能和工作原理。
731 1

热门文章

最新文章