【问题标题】:Inserting XAML elements through C#通过 C# 插入 XAML 元素
【发布时间】:2017-01-05 17:58:06
【问题描述】:

我刚开始使用通用 Windows 平台,实际上也是 C#(我有 C 背景),只是想尝试使用一个基本的会计应用程序来跟踪支票簿。它的工作方式很简单,用户按下 + 或 - 按钮并指定交易的名称和贷记或借记的金额,点击确定,该交易将作为一行插入。

所以它看起来像这样

Gas       ($20)  1/5/17   _delete_button_
Paycheck   $2400 1/3/17   _delete_button_

Total      $2380

....

所以每一行都有 2 个可编辑的文本框(名称和金额)、一个用于日期的文本字段和一个用于删除该行的按钮。

现在,作为 C 程序员,我的第一直觉就是用这些变量创建一个结构,每次用户插入一行时,只需填充该结构并将其压入堆栈。但是,我只想确保这是执行此操作的最佳方式,并且我不会错过 XAML 的某些功能,可以让我执行此操作。

【问题讨论】:

  • 什么样的 UI 元素包含所有的行
  • XAML 是通常定义视图的语言,尽管语法可用于绑定到模型中的对象(即 C# 或 F# 或其他)。因此,XAML 并没有真正的“功能”允许您创建和操作集合......除了绑定到结构或您正在使用的任何模型。
  • @Aaron Thomas 我遇到了类似 ResourceDictionary 的东西,但我认为它用于画笔等,但也许我认为我可以做一些事情,比如在 XAML 中为一行定义一个模板,然后插入该模板。因为现在我基本上是在绕过 XAML,只是对 C# 中的所有行进行编程
  • @TimAkgayev 您是让用户通过弹出表单添加新数据还是仅使用底部的空白行?如果您不使用空白行,您可以考虑使用的功能是 AaronThomas 提到的绑定。您是否在某种集合中维护您的对象?
  • @TimAkgayev 刚刚看到您的新评论。我个人会有一个描述每个行项目的类,并将其存储在某种绑定到 UI 元素的集合中。这实际上取决于您尝试制作的会计应用程序的复杂程度。例如,假设您想让您的应用程序按费用类型提供搜索功能。如果您仅将数据存储在网格中,它将变得非常混乱,而如果您的对象存储在集合中,您只能显示某些元素,并且仍然存储所有对象并且可以回滚

标签: c# xaml uwp win-universal-app


【解决方案1】:

“现在我作为 C 程序员的第一直觉就是创建一个结构 使用这些变量,每次用户插入一行时,只需填充 结构并将其压入堆栈。但是我只是想确保 这是最好的方法,我不会错过一些功能 可以让我这样做的 XAML。”

这个问题很危险地接近于不满足一个好问题的要求,因为它太宽泛了,但我还是会回答,因为我记得我在新的 XAML 中所经历的痛苦。无论是新的还是有经验的(我最多属于“中级”类别),似乎 XAML 都有它的一些东西,总是会让你寻求帮助。但我离题了。

标准是创建您的模型,然后以某种方式将模型的适当部分连接(或“绑定”)到您的视图。

您将使用 C#(实际上也可以使用 VB 或 F# 或其他)作为您的模型。这是您创建您所指的“结构”的地方。这将定义您的个人交易。然后,再次在您的模型中创建这些交易的集合。

XAML 中,您绑定到此集合。您有一个显示所有事务的控件(视图中的可视元素)。您可以通过控件指定特定事务的名称、选择事务、插入、删除等。所有这些控件都通过绑定与模型交互。

所以,回答您的问题,是的,您缺少 XAML 的一个功能。它被称为绑定。 不要讽刺,但不幸的是,绑定是一项值得数月研究的技术。抱歉,但您一开始会想回到没有 UI 的 C 语言。坚持下去!如果你想做通用应用的事情,那是值得的。您甚至可能会发现自己喜欢(部分)它。

开始使用的链接:

WPF and other XAML-related

【讨论】:

  • 请注意,Aaron 的链接是针对 WPF 而不是针对 UWP。对于 UWP 数据绑定,从 msdn.microsoft.com/windows/uwp/data-binding/index 开始
  • 这是一个很好的链接,谢谢。如果 wpf 和 uwp 相似,第一个让我摸不着头脑。
  • @TimAkgayev:WPF 和 UWP 没有任何共同点,除了都选择 XAML 作为它们的对象实例化标记语言。特别是在数据绑定方面,与 Windows 10 中引入的新 {x:Bind} 语法存在显着差异。
  • 是否有一个文档解释了所有这些技术以及它们的适当用途,我读到的另一个线程说它们都是相似的,除了 WPF 不受沙盒的限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 2019-04-22
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
相关资源
最近更新 更多