当前位置: 首页 > news >正文

WPF 中 MultiConverter ——XAML中复杂传参方式

1. XAML代码

<!--  数据库表格  -->
<!--  RowHeaderWidth="0": 把默认的行表头隐藏  -->
<DataGridx:Name="xDataGrid"Grid.Row="2"hc:DataGridAttach.ShowRowNumber="True"ItemsSource="{Binding WaferInfos, Mode=TwoWay}"RowDetailsVisibilityMode="VisibleWhenSelected"RowHeaderWidth="0"RowStyle="{StaticResource DataGridRowStyle1}"SelectedIndex="{Binding SelectIndex_WaferInfo, Mode=TwoWay}"SelectedItem="{Binding SelectItem_WaferInfo, Mode=TwoWay}"Style="{StaticResource DataGridStyle}"VirtualizingPanel.IsVirtualizing="True"><DataGrid.Columns><!--  Index  --><DataGridTemplateColumn Header="Index" HeaderStyle="{StaticResource DataGridHeaderStyleLeft}"><DataGridTemplateColumn.CellTemplate><DataTemplate><TextBlock x:Name="xRowIndex" Padding="10"><TextBlock.Text><MultiBinding Converter="{StaticResource RowIndexConveter}"><!--  DataGrid 的 DataContext 是 UserControl中定义的 DataContext,--><!--  DataGridColumns 的 DataContext 是 ItemeSource 绑定的元素。--><!--  所以在 DataGridColumns 中要使用 UserControl 中的属性,需要改变 DataContext  --><!--  通过 RelativeResource 向上查找 DataContext  --><Binding Path="Header" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}" /><!--  通过 ElementName 直接定位 控件的 DataContext  --><Binding ElementName="xDataGrid" Path="DataContext.CurPageNum" /><!--<Binding Path="DataContext.CurPageNum" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}"/>--></MultiBinding></TextBlock.Text></TextBlock></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns>
</DataGrid>

2. Converter实现

public class RowIndexConveter : IMultiValueConverter
{public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture){int index = System.Convert.ToInt32(values[0]);int curPageNum = System.Convert.ToInt32(values[1]);return (index + (curPageNum - 1) * 100).ToString();throw new NotImplementedException();}public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture){throw new NotImplementedException();}
}

3. 注意事项

(1)Converter 分常规 IValueConverter 和 IMultiValueConverter。区别则是传参不一样。

(2)ConverterParameter 只能赋值字符串,不能Binding。

(3)DataGrid 的 DataContext 是 UserControl中定义的 DataContext。而下面 DataGridColumns 的 DataContext 是 ItemeSource 绑定的元素,所以下面如果要使用 UserControl 中的属性,需要改变 DataContext。

http://www.lryc.cn/news/488523.html

相关文章:

  • 实验室管理现代化:Spring Boot技术方案
  • aws凭证(一)凭证存储
  • jmeter常用配置元件介绍总结之断言
  • JMeter监听器与压测监控之Grafana
  • MySQL8 安装教程
  • 聚焦 NLP 和生成式 AI 的创新与未来 基础前置知识点
  • 23种设计模式-访问者(Visitor)设计模式
  • ssm150旅游网站的设计与实现+jsp(论文+源码)_kaic
  • 【SKFramework框架】一、框架介绍
  • Arcgis地图实战三:自定义导航功能的实现
  • LLaMA-Factory 上手即用教程
  • 黑马点评 秒杀下单出现的问题:服务器异常---java.lang.NullPointerException: null(已解决)
  • 购物街项目TabBar的封装
  • C++游戏开发面试题及参考答案
  • 字符串的基本操作(C语言版)
  • C缺陷与陷阱 — 7 可移植性缺陷
  • 应急响应:玄机_Linux后门应急
  • C++:捕获 shared_from_this()和捕获this的区别
  • 网络协议之TCP
  • 《澳鹏AI全景报告2024》分析最新的数据挑战
  • 【Java每日面试题】—— String、StringBuilder和StringBuffer的区别?
  • 【设计模式】【创建型模式(Creational Patterns)】之单例模式
  • form表单的使用
  • PDF内容提取,MinerU使用
  • SpringCloud篇(服务网关 - GateWay)
  • 自动化测试之unittest框架详解
  • Vue3 provide 和 inject的使用
  • 掌握Git分布式版本控制工具:从基础到实践
  • AndroidStudio与开发板调试时连接失败或APP闪退的解决方案,涉及SELINUX及获取Root权限
  • VMWARE虚拟交换机的负载平衡算法