2010-10-07 81 views
0

我的问题之间的结合如下:双向样资源的属性和运行时对象属性

我已经定义了一个TextBox为在ResourceDictionary中一个工具栏子(X:关键MyToolbar)。当我的应用程序加载时,它将ToolBar正确地放置在Window框架内以及其TextBox。到现在为止还挺好。

当然,我非常希望TextBox能够双向绑定到任何ResourceDictionary中未定义的对象的属性。

更确切地说,当TextBox全部设置在正确的窗口框架中,然后在“Open”命令之后加载某个文件,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事件作为字符串值被传递/绑定到DesignerCanvas'Token'属性上的触发器)。

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

我该如何做到这一点?我绝对需要在DesignerCanvas中注册“Token” - DependencyProperty吗?我是否绝对需要在某处定义一个用于DesignerCanvas的XAML(例如,在我的Window1.xaml中,或者与TextBox一起使用了一个dummyS:DesignerCanvas资源)?

帮助感谢!

回答

0

你有没有试着用你的文本数据绑定...

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

...那么当你的应用程序加载,并将在窗框的工具栏中,确保其也设置工具栏的DataContext属性到你的DesignerCanvas类的实例?