Resource的属性和运行时对象属性之间的双向绑定

时间:2010-10-07 17:33:02

标签: wpf data-binding xaml resources

我的问题如下:

我已在TextDictionary(x:Key MyToolbar)中将TextBox定义为ToolBar的子级。当我的应用程序加载时,它会将ToolBar与其TextBox一起正确放置在Window框架内。到现在为止还挺好。

当然,我希望TextBox与某些对象的属性是双向数据绑定,这些属性未在任何ResourceDictionary中定义。

更确切地说,当TextBox全部设置在正确的窗口框架中,然后,在“打开”命令后加载某个文件时,Deserializer使用该文件中的值构建DesignerCanvas对象,在我的例子中是实现INotifyPropertyChanged的类的字符串“Token”CLR属性。

这里有一些简化的代码片段。为了清楚起见,我会留下许多空白:

类DesignerCanvas:INotifyPropertyChanged

{

  Private string m_token;

  Public string Token

  {

     Get{….

     Set{ if (value…)

     OnPropertyChanged(“Token”);

  }

  //notice there is no Constructor other than the default one

}

在XAML方面我有类似的东西:

<ToolBar x:Key=”MyToolbar…..

    <TextBox …

现在,我的两个目标是:在我的工具栏上拥有“静态”TextBox资源,一旦属性发生变化,就会获取DesignerCanvas“Token”属性的值(即第一次得到一个值,基本上),同样地,更重要的是,我希望让DesignerCanvas能够将我可以手动输入的值读入TextBox并用该用户输入文本填充其Token属性(我想我会选择TextBox) 'LostFocus Event作为传递/绑定到DesignerCanvas'“Token”属性的字符串值的触发器。)

无论如何,我不确定如何在TextBox的Text属性和DesignerCanvas的Token属性之间建立一个完美的双向(或双向)DataBinding,因为我们有一个静态资源(I'我不确定静态是否是正确的单词)和另一个动态运行时对象(再次不确定运行时或动态是否是单词)。

我如何实现这一目标?我是否绝对需要在DesignerCanvas中注册“令牌” - DependencyProperty?我是否绝对需要在某处定义DesignerCanvas的XAML(例如在我的Window1.xaml或虚拟s:DesignerCanvas资源以及TextBox中)?

帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用文本框进行数据绑定...

<TextBox Text="{Binding Path=Token, Mode=TwoWay}" />

...然后当您的应用加载并将ToolBar放置在窗口框架中时,请确保它还将ToolBar的DataContext属性设置为DesignerCanvas类的实例?