从绑定项获取 ItemsControl 内的 DataGrid

2023-11-29

我有一个 ItemsControl 在其模板中使用 DataGrid,如下所示:

<ItemsControl Name="icDists" ItemsSource="{Binding Dists}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <DataGrid ItemsSource="{Binding}" Width="150" Margin="5" AutoGenerateColumns="False" IsReadOnly="True">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Key" Binding="{Binding Key}" Width="1*" />
                    <DataGridTextColumn Header="Value" Binding="{Binding Value}" Width="1*" />
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

ItemsControl 绑定到Dists我的模型中的属性如下所示:

ObservableCollection<Dictionary<string, string>> Dists;

如何获取与 Dists 属性中的项目相对应的 DataGrid?我尝试过使用这段代码,它给了我一个 ContentPresenter 但我不知道如何从中获取 DataGrid:

var d = Dists[i];
var uiElement = (UIElement)icDistribucion.ItemContainerGenerator.ContainerFromItem(d);

我尝试过爬上树VisualHelper.GetParent但找不到 DataGrid。


如果你想做类似的事情,需要搜索 VisualTree。不过我建议您多阅读一些有关 MVVM 模式的内容。但这就是你想要的。


using System.Windows.Media;

private T FindFirstElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
    var count = VisualTreeHelper.GetChildrenCount(parentElement);
    if (count == 0)
        return null;

    for (int i = 0; i < count; i++)
    {
        var child = VisualTreeHelper.GetChild(parentElement, i);

        if (child != null && child is T)
        {
            return (T)child;
        }
        else
        {
            var result = FindFirstElementInVisualTree<T>(child);
            if (result != null)
                return result;
        }
    }
    return null;
}

现在,设置 ItemsSource 后,ItemsControl 就准备好了。我只是要在Loaded event.

private void icDists_Loaded(object sender, RoutedEventArgs e)
{
    // get the container for the first index
    var item = this.icDists.ItemContainerGenerator.ContainerFromIndex(0);
    // var item = this.icDists.ItemContainerGenerator.ContainerFromItem(item_object); // you can also get it from an item if you pass the item in the ItemsSource correctly

    // find the DataGrid for the first container
    DataGrid dg = FindFirstElementInVisualTree<DataGrid>(item);

    // at this point dg should be the DataGrid of the first item in your list

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从绑定项获取 ItemsControl 内的 DataGrid 的相关文章

随机推荐

  • java applet 小程序的替代品是什么?

    我正在开发一个 Web 应用程序 其中我们有一个客户端小程序应用程序 它将检查客户端计算机上是否安装了证书 但大家都知道 Mozilla 很快就会停止支持小程序 谁能建议做同样事情的替代选择是什么 Java 网络启动 The 其他答案已过期
  • 为什么 Chrome 在反复刷新使用 WebAssembly 的页面后最终会抛出“内存不足:wasm 内存”?

    我愿意相信刷新浏览器窗口或选项卡不会泄漏 不幸的是 当涉及 WebAssembly 时 情况似乎并非如此 我用 Rust 构建了一个 WebAssembly 箱 该包的编译大小约为 360 Kb 内容压缩之前 并且该包在 Firefox 甚
  • 这是将训练集投影到特征空间的正确方法吗? MATLAB

    我使用以下方法计算了 PCA function signals V pca2 data M N size data data reshape data M N 1 subtract off the mean for each dimensi
  • 将文本在 div 中垂直和水平居中

    我正在使用 bootstrap 并尝试创建一个高度和宽度与其宿主容器相同的 Cell 标题占该空间的 30 值占该空间的 70 该值有上限和下限 各占 20 为实际值留出 60 的空间 HTML div class container fl
  • Excel VBA退出Word文档

    我有一个宏 可以将 Excel 文档的选定单元格插入到 Word 模板中 复制整个 Word 文档 然后关闭文档而不保存 以保留某些关键字 但是 当它关闭 Word 文档时 它会打开一个空白的 Word 窗口 其中没有活动文档 并且每次运行
  • Django 模板和 MongoDB _id

    Variables and attributes may not begin with underscores value id 如何引用 idDjango 模板中从 MongoDB 获取的项目的数量 自定义模板过滤器有助于 from dj
  • jquery:.css 与附加到头部之间的速度差异?

    我们对内部应用程序有一些笨拙的解决方法 我想知道哪种 jQuery css 技术被认为更快 更高效 等等 技术A使用 css doc css margin top 90px checkouthelp css margin 50px 50px
  • 了解 Python 中的 for 循环

    我正在尝试创建一个for循环 我遇到了问题 我不明白这些循环是如何工作的 我认为问题是因为我正在使用for语法错误 据我了解 一个for循环应该看起来像 for w in words print w len w But 它究竟是如何运作的
  • 将 PHP Unix 时间戳转换为 Javascript 时间戳格式

    我将 php 中的 unix 时间戳抛出到 javascript 中 我注意到 PHP 和 Javascript 时间戳与纪元不同 秒与毫秒 我基本上所做的就是回显 php unix 时间 然后添加 3 个零 简单地将其乘以 1000 但我
  • Excel UDF 到表中的数据块的逆透视(融化、反向透视、展平、标准化)

    这个问题将寻求多种方法LET LAMBDA VBA UDF and Power Query Function 因此不会有单一的正确答案 而是征集可供参考的方法 Scott提出了一个问题here关于反转包含数据块而不是单个数据点的复杂表 基本
  • 无法在 Angular 6 中添加 Bootstrap 4

    当我尝试添加最新的引导程序版本时遇到问题 npm install bootstrap 之后 当我尝试运行它时收到一条错误消息 ng serve open 我在 angular json 中添加 Bootstrap 像这样 styles no
  • Xamarin Forms PopAsync 崩溃

    我用 PCL 构建了一个 Xamarin 表单应用程序 应用程序有时会崩溃await Navigation PopAsync 我找到了这个https forums xamarin com discussion 62414 app resum
  • 通过分隔符将 T-SQL 字符串拆分为列?

    我有一个表 其中有一列使用连字符分隔的八个值集 其中一些为空白 我试图将此字符串拆分为列 每个值对应于分隔字符串的位置 Table1 Record StringValue rec1 422100 130 1034 10901 12000 r
  • 如何查看活动的 SQL Server 连接?

    我正在使用 SQL Server 2008 Enterprise 我想查看任何活动的 SQL Server 连接 以及所有连接的相关信息 例如来自哪个 IP 地址 连接到哪个数据库等等 是否有现有的命令可以解决这个问题 SELECT DB
  • 如何使用分类轴在条形图上叠加数据点

    Goal 我正在尝试使用 Seaborn 在带有多个分组条形图的图中显示各个数据点 Problem 我尝试使用条形图的猫图和各个数据点的猫图来完成此操作 但是 这会生成 2 个数字 一个包含条形图 另一个包含各个数据点 问题 有没有办法使用
  • 如何制作非矩形Winform?

    我正在使用下面的代码来更改 winform 的形状 它正在改变形状 但不是我想要的那样 我需要表格有弯角 我应该使用什么积分来获得它 public void MakeNonRectangularForm var p new Graphics
  • ms-access加载数据问题

    我有一个非常复杂的表格 如下所示 替代文本http img9 imageshack us img9 2465 test2xk jpg 然而 我的数据库中总共只有 8MB 的数据 它的工作方式是用所有记录名称一直填充左侧的列表框 当您滚动记录
  • 使用 SCALER_CROP_REGION 裁剪时 Camera2 预览会拉伸

    我想在以下位置显示预览全屏使用camera2 API 我选择的相机尺寸是4160x3120 16 9 我的屏幕是1080x1920 9 16 因此 如果我希望预览正确缩放 我必须裁剪相机输出 Rect zoomCrop new Rect 0
  • C4 保存图像的一部分

    嘿 我浏览了保存图像的示例 然后我只想保存屏幕的一部分 我设法保存从图像左上角开始的部分 但实际上我想保存屏幕的中心 仅保存图像的一部分的神奇之处在于设置具有特定大小的图形上下文 如下所示 UIGraphicsBeginImageConte
  • 从绑定项获取 ItemsControl 内的 DataGrid

    我有一个 ItemsControl 在其模板中使用 DataGrid 如下所示