WPF-Data Binding-Resource - 将新值应用于资源不会影响绑定控件

时间:2011-08-08 03:35:37

标签: wpf data-binding wpf-controls binding

我的代码就是打击:
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.

为什么?

2 个答案:

答案 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)

好的方法是

  1. 将StaticResource绑定更改为DynamicResource(确保在任何地方都这样做,hh称为StaticResource)

    <TextBox  Name="txtHHName" Text="{Binding Source={DynamicResource hh}, Path=HandHeldName, Mode=TwoWay}" />
    
  2. 从资源集合中删除资源,并添加具有相同密钥的新资源...

    this.Resources.Remove("hh");
    this.Resources.Add("hh", new HandHeld()); //this line should take affect. 
    
  3. 如果有效,请验证并告诉我。