如何在 XAML 和 C# 中将字符串列表显示为 DataGrid(表)

2024-05-26

我已经在 SO 上潜伏了很长时间,直到最近才决定建立一个帐户。我花了很多时间试图解决这个我一直没有询问的问题,但我就在这里。

我正在努力实现的目标:

我有一个字符串列表,例如:Mango、Banana、Melon(我们称之为水果),我想将其显示为 XAML (WPF) 中的表格,其中它在左侧和右侧显示为行值将是组合框,允许用户选择一个值。我目前陷入了这个问题的显示部分。我决定使用 DataGrid 来显示列表,后面的代码将执行数据绑定。

这是它的 XAML 部分:

<DataGrid x:Name="FruitDataGrid" Height="265" VerticalAlignment="Center" Margin="-7,8,-2,-6" HorizontalAlignment="Left" Width="1188" AutoGenerateColumns="False"> 
 <!-- If AutoGenerateColumns was true only the length is displayed.-->
         <DataGrid.Columns>
         <DataGridTextColumn x:Name="fruitsDisplay" Header="Fruits" MinWidth="450" IsReadOnly="True" />
         <DataGridComboBoxColumn Header="Number of Boxes" MinWidth ="200" CanUserResize="True" Width="*"></DataGridComboBoxColumn>
  </DataGrid.Columns>

到目前为止,代码隐藏非常简单,经过多次尝试,这是最新的。

private void populateFruitList()
    {
        FruitDataGrid.DataContext = fruitDataTable;
        //Binds a datatable instance to the datagrid, does not display anything.
    }

我一直在尝试:

将字符串列表转换为可观察集合或可枚举,然后执行 FruitDataGrid.itemsource =fruitsObservable;

上面的方法是有效的,只不过它只会显示每个字符串值的长度(如果 autogeneratecolumns 为 true),这不是我想要的。如果 autogeneratecolumns 为 false,那么我可以看到显示的行,但看不到字符串值。

我也尝试使用DataView或DataGridView,但我未能在XAML中定义它,VS2012说没有这样的事情。

我一直在尝试进行数据绑定以及MSDN 文章 https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh464965.aspx说,但 VS2012 从未设法正确绑定到列表。

然后,我尝试将列表更改为数据表并[使用此处指定的 datagridview,但 XAML 再次告诉我它不是有效的类][2]。我也知道 datagridview 可能会对性能产生影响,但此时我只想真正显示一个表格。

我还看到一些教程使用 DataGrid.datasource 方法,但这不在我想要的 DataGrid 中,我认为它是一个不同的类? (我尝试使用的 DataGrid 是 System.Windows.Controls.DataGrid,另一个位于 Windows 窗体中 [如此处所示][3])

再次感谢您花时间调查此事。

EDIT

尝试以这种方式绑定到 XAML 中的列表:

<DataGrid x:Name="FruitDataGrid" Height="265" VerticalAlignment="Center" Margin="-7,8,-2,-6" HorizontalAlignment="Left" Width="1188" AutoGenerateColumns="False" ItemsSource="fruitDataList"> 

我在 XAML 中收到错误“IEnumerable 的类型转换器不支持从字符串转换”,我认为这是因为我做错了。不过,该表现在显示了很多空行。

尝试 ItemSsource="{Binding FruitDataList}" (其中 FruitDataList 是一个列表)会产生一个空白表,并且 VS 中会出现 BindingExpression 路径错误的错误。


总结一下上一个问题,由于 Muds 和数小时的尝试,XAML 中的绑定没有正确完成。

在 FruitDataGrid 中,该属性应写为ItemSource="{Binding}"这告诉 XAML 代码绑定到 DataContext 在后面的代码中分配给的任何对象。

之后,在 DataGrid.Column 中,需要此属性。

Binding="{Binding Path=.}"

对我来说一定就是这样。缺少点或不将其括在引号中将不会显示水果。

因此,为了清楚起见:

在 XAML 中:

<DataGrid x:Name="FruitDataGrid" 
 Height="265" VerticalAlignment="Center" Margin="-7,8,-2,-6" 
 HorizontalAlignment="Left" Width="1188" 
 AutoGenerateColumns="False"
 ItemSource="{Binding}"> 
<!-- If AutoGenerateColumns was true only the length is displayed.-->
<DataGrid.Columns>
<DataGridTextColumn 
      x:Name="fruitsDisplay" 
      Header="Fruits" MinWidth="450" 
      IsReadOnly="True" 
      Binding="{Binding Path=.}"/>    <!--Exactly like this -->
<DataGridComboBoxColumn 
       Header="Number of Boxes" 
       MinWidth ="200" 
       CanUserResize="True" Width="*" />
 </DataGrid.Columns>

然后在代码隐藏中(filename.xaml.xs)

//Anywhere you plan to bind the list in my case FruitList
List<string> fruitList = new List<string>();
fruitList.add("Melon");
fruitList.add("Mango");
fruitList.add("Banana");

FruitDataGrid.DataContext = fruitList;

现在您将看到一个以表格形式显示的非常漂亮的列表。耗费我两天时间的是绑定路径应该有一个 . (点)就在那里,我绑定到一个字符串而不是一个对象(当您执行 Binding = {“fruitList”} 时,您实际上绑定到字符串“fruitList”。这个业余错误源于我自学 XAML 的不足。

再次感谢,穆兹。我会选择你的答案,因为它对我有帮助,接受我自己的答案感觉很奇怪。

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

如何在 XAML 和 C# 中将字符串列表显示为 DataGrid(表) 的相关文章

  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 按成员序列化

    我已经实现了template
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐