欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > WPF 中 MultiConverter ——XAML中复杂传参方式

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

2024/11/30 8:51:56 来源:https://blog.csdn.net/abc1564984930/article/details/143872817  浏览:    关键词: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。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com