【问题标题】:How to declare/define variable in pure XAML without code-behind如何在没有代码隐藏的纯 XAML 中声明/定义变量
【发布时间】:2014-05-13 19:48:17
【问题描述】:

请考虑以下 XAML 标记(Visual Studio 2010 中的 App.xaml 文件):

<Application x:Class="UpdateTrigger.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:UpdateTrigger"
             xmlns:clr="clr-namespace:System;assembly=mscorlib"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <clr:String x:Key="MyString">My string</clr:String>
    </Application.Resources>
</Application>

我可以像 C# 程序中的变量一样写入MyString 吗?这就是我想要做的:我试图通过纯 XAML 声明和定义一个变量,没有任何代码隐藏。这可能吗?

澄清编辑:

例如,如果我将MyString 绑定到 XAML 中的文本框,用户可以在该文本框中键入内容吗?我试过了,但没能做到。

【问题讨论】:

标签: wpf xaml app.xaml


【解决方案1】:

是否可以绑定和修改资源对象?是和不是。你可以这样做,但对象需要是可变的,所以不能是像 Int32BooleanString 这样的值类型,这是一个不可变的引用类型。该对象还需要有一些正在修改的属性(BindingPath) - 您不能替换整个对象本身。

更重要的问题可能是,您是否应该这样做。对此的回答通常是否定的,但在某些情况下它有时会很有用,例如,直接在 View XAML 中声明一个 ViewModel 实例以提供简单的设计器支持。一般来说,绑定到作为代码一部分的对象几乎总是更好,这样它们就可以轻松地与程序的其他部分进行交互,而无需依赖运行时资源查找。如果您有保留在视图中的数据,例如仅反映 TextBox 的值的 TextBlock,通常最好将它们直接与 ElementName Binding 绑定在一起,而不是添加额外的中间人。

【讨论】:

  • +1 非常感谢。完全忘记了字符串的不变性!除此之外,不知道整个对象无法替换,所以信息量很大。至于您的 cmets re:ViewModel:这就是我最初遇到这个问题的方式——我正在阅读 Reed Copsey 的 WPF 教程。我会研究并尝试ElementName Binding
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多