C# MVVM分发对象

C# MVVM分发对象,c#,wpf,mvvm,C#,Wpf,Mvvm,也许这只是解决问题的一小步,但我目前还不能做到 我为DataContext和Binding做了一些WPF教程,但我不知道如何在(例如)两个页面之间共享上下文和/或绑定 例如,当你看这个: 输入一个名称: 您输入的名称: 结果将是: 这是一个简单的示例,运行和理解它没有问题,但我想要的是: 从代码隐藏中填写文本框和标签。我试着给文本框命名tb,然后只需调用tb.Text=“some Text”-它可以工作。我还尝试为文本框和标签分配一个数据上下文,然后创建一个对象并用该对象填充数据上下文-这也

也许这只是解决问题的一小步,但我目前还不能做到

我为
DataContext
Binding
做了一些WPF教程,但我不知道如何在(例如)两个页面之间共享上下文和/或绑定

例如,当你看这个:

输入一个名称:
您输入的名称:
结果将是:

这是一个简单的示例,运行和理解它没有问题,但我想要的是:

  • 从代码隐藏中填写
    文本框
    标签
    。我试着给
    文本框命名
    tb,然后只需调用
    tb.Text=“some Text”
    -它可以工作。我还尝试为
    文本框
    标签
    分配一个
    数据上下文
    ,然后创建一个对象并用该对象填充数据上下文-这也起到了作用
  • 标签
    放在另一页上
  • 问题2对我来说真的很难,尤其是与问题1相结合的时候。 例如:当我在第1页构造函数中创建对象并为其分配
    DataContext
    (当然)时,只有第1页上的
    文本框将包含该值

    我只是不知道如何将我在第1页声明的这个对象与第2页共享,以便将它也设置为
    DataContext

    也许我只是没有找到一个完美的教程或解释来理解
    DataContext
    Binding
    是如何工作的,以及如何在页面和窗口之间共享对象

    你们能帮帮我吗

    如果您需要更多信息,请随时询问;)

    在app.xaml中创建共享资源:

    <Application x:Class="WpfApplication1.App"
                 xmlns:my="clr-namespace:WpfApplication1">
        <Application.Resources>
    
            <my:MySharedDataContext x:Key="MySharedDataContext" />
    

    第2页有自己的ViewModel吗?@DavidBeaumont是的,只是因为我不知道如何在这两页之间共享同一个ViewModel。我也是MVVM的初学者,但我相信最好的做法是每个视图都有自己的ViewModel。我使用MVVM Lights toolkit通过两个viewmodel进行了通信,实现了一条通知消息。每个页面有一个VM是个好主意,但这两个viewmodel可以引用相同的DTO或共享相同的子viewmodel。e、 g:
    ViewModel1.Person=ViewModel2.Person.
    谢谢您!!这是我一直在寻找的100%。我想知道为什么很多教程都没有解释这一点。他们曾经假设你只使用一个窗口。共享资源的部分最终成为我错过的部分;)我不知道为什么它不起作用。创建新问题并提供更多详细信息。但是,我会将数组定义为MySharedDataContext类的属性,而不是在参考资料中创建数组。。。这里的关键字是
    ObservableCollection
    ;)
    public class MySharedDataContext : INotifyPropertyChanged
    {
        private string _name;
    
        public string Name
        {
            get { return _name; }
            set
            {
                if (value == _name) return;
                _name = value;
                OnPropertyChanged();
            }
        }
    }
    
    <Application x:Class="WpfApplication1.App"
                 xmlns:my="clr-namespace:WpfApplication1">
        <Application.Resources>
    
            <my:MySharedDataContext x:Key="MySharedDataContext" />
    
    <TextBox Text="{Binding Name, Source={StaticResource MySharedDataContext}" />
    
    var dataContext = (MySharedDataContext)FindResource("MySharedDataContext");
    dataContext.Name = "John Smith";