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

Wpf 整个解决方案中的相同数据源,wpf,datasource,expression-blend,Wpf,Datasource,Expression Blend,假设我的解决方案包含两个项目,分别命名为控件和窗体。 在第一个中,我定义了我的控件,在第二个中,我有使用这些控件的页面 项目表单包含一个数据源。数据源包含一个名为(比如)Foo(string)的属性 我是否能够引用“控件”项目中数据源的相同属性 如果不是,是否有其他方法在整个解决方案中包含类似全局变量的内容 更具体地说,在我的示例中:我的控件包含(除其他外)一个按钮。我希望单击按钮更改Foo的值,以便以后可以从表单(不包含此控件)中的页面引用它。您的表单项目必须引用控件项目。因此,如果不需要循环

假设我的解决方案包含两个项目,分别命名为控件和窗体。 在第一个中,我定义了我的控件,在第二个中,我有使用这些控件的页面

项目表单包含一个数据源。数据源包含一个名为(比如)Foo(string)的属性

  • 我是否能够引用“控件”项目中数据源的相同属性
  • 如果不是,是否有其他方法在整个解决方案中包含类似全局变量的内容

  • 更具体地说,在我的示例中:我的控件包含(除其他外)一个按钮。我希望单击按钮更改Foo的值,以便以后可以从表单(不包含此控件)中的页面引用它。

    您的
    表单
    项目必须引用
    控件
    项目。因此,如果不需要循环引用,则必须:

  • 添加第三个项目,例如,
    Common
    ,将
    数据源移到那里
    从
    控件
    表单
    中引用它(最干净的方式)
  • 数据源
    移动到
    控件
    项目(肮脏方式)

  • 如果已在
    主窗口
    上设置了
    数据上下文
    ,则可以从该XAML中的任何控件轻松访问它。您可以使用
    相对资源绑定来执行此操作:

    从显示在
    main window.xaml中的控件:

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

    关于第二种选择,你是说“搬家”吗?我需要从两个项目中引用它。我不知道数据源是什么,你的类?如果是这样,那么就把类的实现放在控件库中。你说的MainWindow是什么意思?这个应该放在哪里?正如我所说,我有一个解决方案,里面有两个项目。我说的“主窗口”是什么意思???如果你没有使用WPF,为什么要用WPF标记这个问题?如果您使用的是WPF,那么您怎么能问我所说的
    MainWindow
    是什么意思?它应该在
    MainWindow.xaml
    ,您的主应用程序窗口中。很抱歉,我认为WFP是一个通用术语。我正在使用Blend for Visual Studio 2013我想知道你为什么一直提到表单。。。如果您使用的是WinForms(或任何其他语言),那么最好编辑您的问题并用实际使用的任何语言替换WPF标记。至少编写您的语言的人能够提供帮助,而不仅仅是WPF开发人员。表单只是包含.xaml页面的项目的名称。控件项目同时包含.xaml和.cs页面。我应该去掉WPF并保持混合吗?
    <Controls:SomeControl DataContext="{Binding DataContext.SomeProperty, RelativeSource={
        RelativeSource AncestorType={x:Type MainWindow}}}" />