【问题标题】:C# Data Binding via code behind doesn't work for Text property in TextBox通过代码后面的 C# 数据绑定不适用于 TextBox 中的 Text 属性
【发布时间】:2015-11-27 13:04:12
【问题描述】:

我有一个带有 xaml 标记的文本框,如下所示:
<TextBox x:Name="txtHN" Text="{Binding Path=AN}"/>

上面的代码运行良好。但是当我将数据绑定实现从 XAML 更改为代码隐藏时,它不再起作用了。以下代码隐藏不再起作用:

Binding textHnBinding = new Binding();
textHnBinding.Path = new PropertyPath("AN");
txtHN.SetBinding(TextBox.TextProperty, textHnBinding);

我已将textbox.datacontext 设置为相同的collectionviewsource,但代码隐藏版本不再起作用。我真的不知道罪魁祸首是什么。

我对 CVS.source 使用以下代码:

                IEnumerable<decimal> ANListWard4 = (from s in context.IPDAN
                                                    where ward.Contains(s.CURRENTWARD)
                                                    select s.AN).Distinct().OrderBy(n => n);
                List<IPDAN> Ward4AN = new List<IPDAN>();
                foreach (decimal d in ANListWard4)
                {
                    IPDAN ward4AN1 = new IPDAN();
                    ward4AN1.AN = d;
                    Ward4AN.Add(ward4AN1);
                }

我将 CVS.Source 设置为 Ward4AN。没有 Ward4AN 为空或没有数据的实例。

【问题讨论】:

  • collectionviewsource 到文本框的文本?可以分享一下collectionviewsource的样本数据吗
  • 你在哪里有设置绑定的代码(在哪个事件中)?您必须分享有关textbox.DataContext 的更多详细信息,这可能是问题所在。输出窗口中是否有绑定错误?
  • 这可能看起来很奇怪,但我设置使用文本框作为另一个 Linq 查询链接到第二个 CVS 的参数源。我不想使用 ListBox 因为它占用的空间比文本框多。
  • 我检查了输出窗口。它有这样一行: System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists;改用默认值。绑定表达式:路径=AN;数据项=空;目标元素是'TextBox'(名称='txtHN');目标属性是“文本”(类型“字符串”)

标签: c# wpf xaml data-binding


【解决方案1】:

你可以试试:

Binding textHnBinding = new Binding("AN");
txtHN.SetBinding(TextBox.TextProperty, textHnBinding);

这就是我完成所有绑定的方式,所以我认为它应该可以工作。

编辑:

很久没有使用绑定了,如果我再次错了,我深表歉意:

Binding textHnBinding = new Binding("AN");
FrameworkElementFactory textHN = new FrameworkElementFactory(typeof(TextBox));
txtHN.SetBinding(TextBox.TextProperty, textHnBinding);

您可以尝试像这样而不是在 Xaml 中实例化您的 Control 来检查它是否可以工作(就像我一样)?谢谢。

【讨论】:

  • 是的,如果你在 c# 中实例化它,或者你更改名称。不要忘记将新的文本框(由代码创建)添加到您的框架中。
【解决方案2】:

在进行绑定时检查collectionViewSource是否不为null。如果在添加绑定时对象为null,则绑定可能不起作用。

还要检查在加载的事件中它是否有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-02
    • 2015-09-25
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2018-03-24
    相关资源
    最近更新 更多