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。

  • 相关阅读:
    ajax设置header头部之后造成跨域的解决方案
    浏览器中实现JavaScript计时器的4种创新方式
    js 生成随机数
    关于JavaScript中的reduce()方法
    JavaScript防流量劫持
    关于Python中的错误与异常,你是否了解的够仔细?
    Python爬虫实战之爬取糗事百科段子
    【推荐】英国金融时报推荐的数据可视化图表分类图
    华为方舟编译器开源官网正式上线
    PyTorch官方教程中文版
  • 原文地址:https://www.cnblogs.com/ca47/p/2511741.html
Copyright © 2011-2022 走看看