WPF:是否将绑定为“的静态资源”;双向';支持双向绑定?

WPF:是否将绑定为“的静态资源”;双向';支持双向绑定?,wpf,xaml,data-binding,Wpf,Xaml,Data Binding,上面是我的xaml代码片段 MuCustomerData是实现INotifyPropertyChanged接口的my类,它具有一个属性CustomerName,该属性将使用PropertyChanged事件通知视图(UI)的更改 在这里,我将类(MyCustomerData)绑定为StaticResource,将绑定模式绑定为双向。这真的是双向的吗?或者我应该使用我的类作为动态资源使绑定双向工作? 因为只有一次StaticResource将被加载,并且当它是StaticResource时,不会进

上面是我的xaml代码片段

MuCustomerData是实现INotifyPropertyChanged接口的my类,它具有一个属性CustomerName,该属性将使用PropertyChanged事件通知视图(UI)的更改

在这里,我将类(MyCustomerData)绑定为StaticResource,将绑定模式绑定为双向。这真的是双向的吗?或者我应该使用我的类作为动态资源使绑定双向工作? 因为只有一次StaticResource将被加载,并且当它是StaticResource时,不会进行任何进一步的更改。。。。
你的想法??我刚刚读了这篇文章,请看一看这篇文章,StaticResource或DynamicResource与绑定无关

我将尽可能简单地向您解释这一点

StaticResource意味着您知道在哪个资源字典中保存具有特定键的对象。就这样。没有别的了。您知道它要么在StackPanel.Resources中,要么在Window.Resources中

当您在VisualTree中的某个地方添加/加载一个带有键的对象到资源字典中时,将使用DynamicSource。它的位置在应用程序启动时未知,因此需要动态加载

请记住,无论您在编程中使用哪种语言,只要您看到提到动力学,它就意味着在运行时发生了某些事情,而不是从一开始就发生了

最好的例子是C#中动态生成的对象。这些对象允许您在运行时定义属性。当应用程序启动时,对象是非常空的


现在回到绑定。在您的情况下,您可以告诉绑定源在哪里,从那一点开始,绑定将工作,而不提供源是如何定义的。

StaticResource或DynamicResource与绑定无关

我将尽可能简单地向您解释这一点

StaticResource意味着您知道在哪个资源字典中保存具有特定键的对象。就这样。没有别的了。您知道它要么在StackPanel.Resources中,要么在Window.Resources中

当您在VisualTree中的某个地方添加/加载一个带有键的对象到资源字典中时,将使用DynamicSource。它的位置在应用程序启动时未知,因此需要动态加载

请记住,无论您在编程中使用哪种语言,只要您看到提到动力学,它就意味着在运行时发生了某些事情,而不是从一开始就发生了

最好的例子是C#中动态生成的对象。这些对象允许您在运行时定义属性。当应用程序启动时,对象是非常空的


现在回到绑定。在您的案例中,您可以告诉绑定源所在的位置以及从该点开始绑定将起作用,而无需给出源如何定义。

StaticResource
DynamicResource
指的是WPF的资源,而不是绑定


StaticResource
计算一次(通常在解析XAML时),并且不会再次计算,因为WPF假定资源是静态的,并且永远不会更改

DynamicResource
意味着资源是动态的,所以在需要值时对其进行评估

在您的情况下,绑定的
Source
属性将被计算一次,并且不会再次计算,因为它被设置为
StaticResource
。如果将
MyCustomerData
对象更改为新对象,则绑定不会再次计算自身以反映更改

但是实际的属性,
CustomerName
,将根据需要进行更新,因为它是使用
双向
绑定绑定的

从另一个角度来看,您正在创建一个绑定,它表示

 <TextBox Name="CustomerName" Height="30" Margin="5"
  Text="{Binding Source={StaticResource MyCustomerData},
   Path=CustomerName, Mode=TwoWay}" Grid.Row="0" Grid.Column="1" />
当您使用
StaticResource
设置
b.Source
时,请考虑使用
b.Source.Name
计算绑定。但是如果要使用
DynamicResource
,请将其视为使用
MyCustomerData.Name
进行评估,因此它将使用当前版本的
MyCustomerData


所以您可以设置
MyCustomerData
=newmycustomerdata();`在对绑定求值一次之后,动态资源会正确地求值,而静态资源不会。

StaticResource
DynamicResource
指的是WPF的资源,而不是绑定


StaticResource
计算一次(通常在解析XAML时),并且不会再次计算,因为WPF假定资源是静态的,并且永远不会更改

DynamicResource
意味着资源是动态的,所以在需要值时对其进行评估

在您的情况下,绑定的
Source
属性将被计算一次,并且不会再次计算,因为它被设置为
StaticResource
。如果将
MyCustomerData
对象更改为新对象,则绑定不会再次计算自身以反映更改

但是实际的属性,
CustomerName
,将根据需要进行更新,因为它是使用
双向
绑定绑定的

从另一个角度来看,您正在创建一个绑定,它表示

 <TextBox Name="CustomerName" Height="30" Margin="5"
  Text="{Binding Source={StaticResource MyCustomerData},
   Path=CustomerName, Mode=TwoWay}" Grid.Row="0" Grid.Column="1" />
当您使用
StaticResource
设置
b.Source
时,请考虑使用
b.Source.Name
计算绑定。但是如果要使用
DynamicResource
,请将其视为使用
MyCustomerData.Name
进行评估,因此它将使用当前版本的
MyCustomerData


所以您可以设置
MyCustomerData
=newmycustomerdata();`在绑定被评估一次之后,动态资源会正确评估,而静态资源不会。

当然,当您将绑定模式设置为双向时,它会以双向方式工作,是什么让您认为它可能不工作?@srsyog