zoukankan      html  css  js  c++  java
  • 2018-8-10-wpf-绑定-DataGridTextColumn-

    title author date CreateTime categories
    wpf 绑定 DataGridTextColumn
    lindexi
    2018-08-10 19:16:53 +0800
    2018-2-13 17:23:3 +0800
    WPF

    本文告诉大家如何在 DataGridTextColumn 使用绑定,因为很容易绑定就找不到数据。

    使用 DataGrid 有一个坑,就是 Columns 的数据绑定拿不到数据。

    例如下面的代码

       <Grid>
            <DataGrid x:Name="MyDataGrid" ItemsSource="{Binding DataList}" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
                    <DataGridTextColumn Header="Property1" Binding="{Binding Property1}"/>
                    <DataGridTextColumn Header="Property2" Binding="{Binding Property2}"/>
              
                    <DataGridTemplateColumn Header="Total">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock>
                                    <TextBlock.Text>
                                        <MultiBinding>
                                            <Binding Path="Property1"/>
                                            <Binding Path="Property2"/>
                                            <MultiBinding.Converter>
                                                <local:MyValueConverter/>
                                            </MultiBinding.Converter>
                                        </MultiBinding>
                                    </TextBlock.Text>
                                </TextBlock>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>

    可以看到绑定了DataGridTextColumn Header="Property1" Binding="{Binding Property1}" 可以拿到数值,但是在MultiBinding没有拿到数值,因为他在DataTemplateDataGridTemplateColumn没有数据。

    解决方法很简单,使用RelativeSource找到数据。只需要修改<Binding Path="DataContext.Property2" RelativeSource="{RelativeSource AncestorType=DataGridCell}"/> 就可以。下面就是修改后的代码

      <Grid>
            <DataGrid x:Name="MyDataGrid" ItemsSource="{Binding DataList}" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
                    <DataGridTextColumn Header="Property1" Binding="{Binding Property1}"/>
                    <DataGridTextColumn Header="Property2" Binding="{Binding Property2}"/>
                    <DataGridTextColumn>
                        <DataGridTextColumn.Binding >
                            <MultiBinding >
                                <Binding Path="DataContext.Property1" RelativeSource="{RelativeSource AncestorType=DataGridCell}"/>
                                <Binding Path="DataContext.Property2" RelativeSource="{RelativeSource AncestorType=DataGridCell}"/>
                                <MultiBinding.Converter>
                                    <local:MyValueConverter/>
                                </MultiBinding.Converter>
                            </MultiBinding>
                        </DataGridTextColumn.Binding>
                    </DataGridTextColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>

  • 相关阅读:
    Lock wait timeout exceeded; try restarting transaction linux设置mysql innodb_lock_wait_timeout
    用NaviCat创建存储过程批量添加测试数据
    mysql存储过程语法及实例
    mysql中迅速插入百万条测试数据的方法
    mysql学习之通过文件创建数据库以及添加数据
    有用的网站集合
    VMware Workstation虚拟磁盘文件备份或移植
    CoreData修改了数据模型报错 The model used to open the store is incompatible with the one used to create the store
    iOS中自定义UITableViewCell的用法
    golang make()的第三个参数
  • 原文地址:https://www.cnblogs.com/lindexi/p/12085544.html
Copyright © 2011-2022 走看看