zoukankan      html  css  js  c++  java
  • WPF中使用DataGrid后,里面的Button的Command不响应的问题

    前一篇说了一个较为复杂的方案,以解决向外代理绑定的问题,上一篇的方案在WPF中是不适用的。现在可以提一个较为通用的方案,可以为WPF及SL共同解决的。方案很简单。

     1 <DataGrid ItemsSource="{Binding Path=AccountStore}">
     2             <DataGrid.Columns>
     3                 <DataGridTextColumn Header="账户名称" Binding="{Binding Path=AccountName}"/>
     4                 <DataGridTemplateColumn Header="相关操作">
     5                     <DataGridTemplateColumn.CellTemplate>
     6                         <DataTemplate>
     7                             <Button Command={Binding Path=Edit}>编辑</Button>
     8                         </DataTemplate>
     9                     </DataGridTemplateColumn.CellTemplate>
    10                 </DataGridTemplateColumn>
    11             </DataGrid.Columns>
    12         </DataGrid>

    显然这样,Edit的Command是属于AccountStore的,这样位置就乱了。这里我们只需要设定它的RelativeSource就可以了。我们可以改成这样

    <UserControl x:Class="KnetSmartBox.ReportModule.Views.UserControl1"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300">
        <Grid>
            <DataGrid ItemsSource="{Binding Path=AccountStore}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="账户名称" Binding="{Binding Path=AccountName}"/>
                    <DataGridTemplateColumn Header="相关操作">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Command="{Binding Path=DataContext.Edit,RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}">编辑</Button>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </UserControl>

    注意标黄的一段,自己理解一下。

    这个属性可以让控件找寻DataContext,这里常用的有两种方式,这里用的是AncestorType,也就是根据类型找,还可以根据级别找,就是AncestorLevel。

  • 相关阅读:
    mysql多表查询
    mysql单表查询
    第四篇: 记录相关操作
    第4章-1.生成3的乘方表 (15分)
    第3章-17.输出10个不重复的英文字母 (50分)
    第3章-22.判断两个字符串是否为变位词 (40分)
    第3章-21.输出大写英文字母 (15分)
    第3章-20.判断回文字符串 (15分)
    第3章-19.逆序的三位数 (10分)
    第3章-18.找最长的字符串 (15分)
  • 原文地址:https://www.cnblogs.com/ca47/p/2511741.html
Copyright © 2011-2022 走看看