我的代码就是打击:
XAML:
<UserControl.Resources>
<Bll:HandHeld x:Key="hh" >
</Bll:HandHeld>
</UserControl.Resources>
用于绑定的其他Xaml
<TextBox Name="txtHHName"
Text="{Binding Source={StaticResource hh}, Path=HandHeldName, Mode=TwoWay}" />
在我的Csharp代码中:
HandHeld hh = this.FindResource("hh") as HandHeld;
hh.HandHeldName="testing";
这个代码工作正常,因为我的Class HandHeld实现了INotifyPropertyChanged,但是当我想将一个属性应用于它自己的追索权时,它不适用于绑定到它的文本框。
HandHeld hh = this.FindResource("hh") as HandHeld;
hh=new HandHeld(); //this line doest not affect. why ?
或者这也不起作用。
this.resources["hh"]=new HandHeld();//this doesnt have any affect too.
为什么?
答案 0 :(得分:0)
首先,
HandHeld hh = this.FindResource("hh") as HandHeld;
hh=new HandHeld();
&安培;
this.resources["hh"]=new HandHeld();
不一样。第一个实现使用代码内部的对象声明(显然应该没有效果),而第二个实现使用类 HandHeld 的xaml对象。
第二个没有效果,因为当您设置对象时,没有任何内容可以通知更改。因此,您可以在当前代码中实现一个或创建依赖项属性。
public static readonly DependencyProperty HandHeldObjProperty =
DependencyProperty.Register("HandHeldObj", typeof(HandHeld), typeof(UserControl),new PropertyMetadata(null));
将XAML中的上述依赖项属性绑定到源。无论何时你想设置值,
SetValue(HandHeldObjProperty, new HandHeld());
<小时/> 编辑:
我认为你有一个特别想要绑定对象的地方。想检查对象(HandHeld对象)是否为空的东西。
如果不是这种情况,您编写的代码应该有效。在启动类之后是否设置了依赖项属性HandHeldName?我的意思是..
this.resources["hh"]=new HandHeld();
hh.HandHeldName="testing";
答案 1 :(得分:0)
好的方法是
将StaticResource绑定更改为DynamicResource(确保在任何地方都这样做,hh称为StaticResource)
<TextBox Name="txtHHName" Text="{Binding Source={DynamicResource hh}, Path=HandHeldName, Mode=TwoWay}" />
从资源集合中删除资源,并添加具有相同密钥的新资源...
this.Resources.Remove("hh");
this.Resources.Add("hh", new HandHeld()); //this line should take affect.
如果有效,请验证并告诉我。