在WPF中的两个用户控件之间共享数据

时间:2014-03-22 04:02:10

标签: c# wpf

我有usercontrol让我们说UA带有一个文本框。现在我想访问另一个usercontrol的代码隐藏中的文本框中的值,让UB说 用户控件都位于选项卡上。有效的方法是什么?

1 个答案:

答案 0 :(得分:0)

为UserControls提供另一个可以绑定的依赖项属性或

一些xaml:

<local:Uc1 x:Name="uc1" DataContext="{Binding ElementName=uc2, Path=Thing}" />
<local:Uc2 x:Name="uc2" />

这也可以在代码中完成。

或将两个UserControl绑定到同一个ViewModel。

还可以查看thisthis

更新了答案

在MainWindow.cs中定义自定义依赖项属性

public string Prop
    {
        get { return (string)GetValue(PropProperty); }
        set { SetValue(PropProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Prop.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty PropProperty =
        DependencyProperty.Register("Prop", typeof(string), typeof(MainWindow), new PropertyMetadata("Hello!!"));

现在只需将此dp绑定到您的两个用户控件即可 UserControl 1

public string Prop
    {
        get { return (string)GetValue(PropProperty); }
        set { SetValue(PropProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Prop.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty PropProperty =
        DependencyProperty.Register("Prop", typeof(string), typeof(MainWindow), new PropertyMetadata("Hello!!"));

UserControl 2

 <Grid>
    <TextBox Height="25" Text="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=Prop, 
        Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="65"/>
</Grid>

这只是一个使用自定义dp的例子。