【问题标题】:How to Databind TextBox to Property in CodeBehind如何在 CodeBehind 中将 TextBox 数据绑定到属性
【发布时间】:2010-08-22 17:50:56
【问题描述】:

我正在使用 Expression Blend。

假设我得到了:

Public string FirstName{get;set;}

编辑:感谢您的回答,但恐怕人们不理解我的问题。我确实知道如何在代码或 XAML 中绑定数据。

我的问题是,是否有一种方法可以使用 Expression Blend 界面完成所有这些操作,而无需直接编写它。仅通过鼠标移动。

【问题讨论】:

  • 如果我正确理解了您的新问题,您想仅使用 Blend 接口绑定到代码隐藏的属性吗?如果不先为页面设置数据上下文,我认为你不能。
  • +1,看不到投反对票的原因。虽然不是严格的编程,但它仍然是相关的。
  • @HiTech Magic - 我不介意唯一的代码是设置数据上下文。

标签: wpf silverlight expression-blend blend


【解决方案1】:

您实际上希望将属性放在视图模型上,并使用 XAML 绑定,但这是另一回事。

当您描述您的示例时,您首先需要将“FirstName”属性实现为依赖属性,而不是简单的 get/set。 Here is a great code-snippet from Shawn Wildermuth 以节省大量输入(您需要修复 sn-p 中的一个拼写错误 - “($type$)args.NewValue;”... NewValue 的大小写错误在 sn-p 中)。

您可以在 XAML 中绑定到一个简单的 get/set 属性,但它是一种单向/一次性绑定,不会随更改而更新。

在代码中,绑定需要设置两件事。

  • 设置控件(或页面)的DataContext和
  • 在控件上设置数据绑定。

对于您提到的示例,您可以使用如下代码(假设在 Xaml 中有一个名为 myTextBox 的 TextBox 控件):

using System.Windows;
using System.Windows.Controls;

namespace BindingCodeTest
{
    public partial class BindingCode : UserControl
    {
        public string FirstName
        {
            get { return (string)GetValue(FirstNameProperty); }
            set { SetValue(FirstNameProperty, value); }
        }

        // Using a DependencyProperty as the backing store for FirstName.  
        // This enables animation, styling, binding, etc...
        public static readonly DependencyProperty FirstNameProperty =
        DependencyProperty.Register("FirstName",
                                     typeof(string),
                                     typeof(BindingCode),
                                     new PropertyMetadata(string.Empty,
                                     new PropertyChangedCallback(OnFirstNameChanged)));

        static void OnFirstNameChanged(object sender, DependencyPropertyChangedEventArgs args)
        {
            // Get reference to self
            BindingCode source = (BindingCode)sender;

            // Add Handling Code
            string newValue = (string)args.NewValue;
        }

        public BindingCode()
        {
            InitializeComponent();
            myTextBox.DataContext = this;
            myTextBox.SetBinding(TextBox.TextProperty, new System.Windows.Data.Binding("FirstName"));
            FirstName = "First name";    // Sample change
        }
    }
}

【讨论】:

    【解决方案2】:

    在 Blend 4 中,在“数据”选项卡上 > 新示例数据.. > 根据需要命名数据源,例如'MySampleDataSource'。然后您的“MySampleDataSource”将有一个“+”按钮(右侧相同的数据选项卡),带有 3 个选项。选择“添加简单属性”并将其命名为“名字”。然后将该属性拖到您的 TextBox 或 TextBlock 上。

    结果是这样的:

    <TextBlock x:Name="firstName" Text="{Binding FirstName}"/>
    

    【讨论】:

    • 我想这是最适合我的问题的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2010-09-20
    相关资源
    最近更新 更多