2010-06-04 85 views
0

到我已经创建日期和控制,当他们位于同一目录中或同一XAML文档中的其他对象之间建立绑定和依赖。如何设置绑定用户控件在不同的目录

现在我已经创建了位于我的项目目录中称为“控件”此控件,则主XAML文档中使用标签

我的问题是我怎么加载的用户控件去设置用户控件中的对象与主xaml文档中的对象之间的绑定。

这方面的一个例子是,如果我有我的用户控件中,主XAML页面我有一个复选框中的一个文本框。当点击复选框时,我想将文本框的可见性设置为折叠。

正如我所说的,我已经能够做到这一点,当两个对象都是在同一个文档内,但现在由于文本字段放置在用户控件内部的一个目录中,我不确定如何引用它。

谢谢

回答

0

向您的UserControl添加一个DependencyProperty。在主窗口的XAML中,绑定到DependencyProperty。在你的用户控件的XAML,绑定使用RelativeSource FindAncestor相同的DependencyProperty。

例如,如果您的用户控件被称为“的MyUserControl”,有一个DependencyProperty“ShowDetails”,在主XAML的结合将是:

<Window ...> 
    ... 
    <local:MyUserControl ShowDetails="{Binding IsChecked,ElementName=checkBox}" /> 
    ... 
    <CheckBox x:Name=checkBox Content="Show Details" /> 
    ... 
</Window> 

,并在用户控件的XAML这将是:

<UserControl ...> 
    ... 
    <Textbox ... 
    Visibility="{Binding ShowDetails, 
     RelativeSource={RelativeSource FindAncestor,local:MyUserControl,1}, 
     Converter={StaticResource BoolToVisibiltyConverter}" /> 
    ... 
</UserControl> 

更重要的是,使用MVVM模式。在这种情况下,你会放在你的视图模型的的DependencyProperty这将是throught两个主窗口的DataContext的,你的用户控件访问。随着MVVM没有必要使用FindAncestor或的ElementName,因为这两个复选框,并直接在文本框绑定到视图模型属性:

<Window ...> 

    <local:MyUserControl /> 
    ... 
    <CheckBox IsChecked="{Binding ShowDetails}" Content="Show Details" /> 

</Window> 

这个用户控件:

<UserControl> 
    ... 
    <TextBox ... 
    Visibility="{Binding ShowDetails, 
     Converter={StaticResource BoolToVisibiltyConverter}" /> 
    ... 
</UserControl>