整个解决方案中的数据源相同

时间:2014-05-06 11:40:13

标签: wpf datasource expression-blend

让我们假设我的解决方案包含2个名为Controls和Forms的项目。 在第一个我定义我的控件,在第二个我有使用控件的页面。

项目表单,包含一个DataSource。 DataSource包含一个名为(let' s)Foo(string)。

的属性
  1. 我是否能够从" Controls"引用数据源的相同属性?项目
  2. 如果不是,是否还有其他方法可以在整个解决方案中使用全局变量
  3. 更具体地说明我的示例:我的控件包含(其中包括)一个按钮。我想在按钮上单击以更改Foo的值,以便稍后可以从Forms中的页面引用它(不包含此Control)。

2 个答案:

答案 0 :(得分:1)

您的Forms项目必须引用Controls项目。因此,如果您不想要循环引用,则必须:

  1. 添加第三个项目,例如Common,移动DataSource和。{ 从ControlsForms(最干净的方式)
  2. 引用它
  3. 将您的DataSource移至Controls项目(脏路)

答案 1 :(得分:1)

如果您在DataContext上设置了MainWindow,则可以从该XAML中的任何控件轻松访问它。您可以使用RelativeSource Binding执行此操作:

来自MainWindow.xaml中显示的控件:

<Controls:SomeControl DataContext="{Binding DataContext, RelativeSource={RelativeSource
    AncestorType={x:Type MainWindow}}}" />

Binding Path会将DataContext控件的SomeControl设置为MainWindow.DataContext中设置的相同值。如果您想将DataContext控件的SomeControl设置为MainWindow.DataContext对象值的属性,则可以执行以下操作:

<Controls:SomeControl DataContext="{Binding DataContext.SomeProperty, RelativeSource={
    RelativeSource AncestorType={x:Type MainWindow}}}" />