通过代码隐藏的C#数据绑定不适用于TextBox中的Text属性

时间:2015-09-02 06:33:11

标签: c# wpf xaml data-binding

我有一个带有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设置为相同的collectionsviewsource,但代码隐藏版本不再适用。我真的不知道什么是罪魁祸首。

我将以下代码用于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为null或没有数据的实例。

2 个答案:

答案 0 :(得分:0)

你可以尝试:

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);

你能尝试像这样实例化你的Control,而不是在Xaml中检查它是否会起作用(就像我一样)?谢谢。

答案 1 :(得分:0)

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

同时检查加载的事件是否有效。