MVVM 分布对象

MVVM Distribute Objects

也许这只是解决方案的一小步,但到目前为止我还无法解决。

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

例如当你看这个时:https://msdn.microsoft.com/en-us/library/ms754356%28v=vs.110%29.aspx

<Label>Enter a Name:</Label>
<TextBox>
    <TextBox.Text>
        <Binding Source="{StaticResource myDataSource}" Path="Name" UpdateSourceTrigger="PropertyChanged"/>
    </TextBox.Text>
</TextBox>

<Label>The name you entered:</Label>
<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=Name}"/>

这将是结果:

这是一个简单的例子,没有问题运行并且理解这一点,但我想要的是:

  1. 从后面的代码中填写 TextBoxLabel。我试图命名 TextBox tb 然后调用 tb.Text = "some text" - 它有效。我还尝试为 TextBoxLabel 分配一个 DataContext,然后创建一个对象并用该对象 填充 DataContext - 这个也有效。
  2. 正在将 Label 放在另一页上。

问题2对我来说真的很难,尤其是结合问题1。 例如:当我在第 1 页构造函数中创建对象并将其分配给 DataContext(当然)时,只有第 1 页上的 TextBox 将包含该值。

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

也许我只是没有找到完美的教程或解释来让我理解 DataContextBinding 的真正工作原理以及我如何在页面和 windows 之间共享对象。

你们能帮帮我吗?

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

public class MySharedDataContext : INotifyPropertyChanged
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set
        {
            if (value == _name) return;
            _name = value;
            OnPropertyChanged();
        }
    }
}

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

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

        <my:MySharedDataContext x:Key="MySharedDataContext" />

现在您可以在两个页面中使用共享资源了:

<TextBox Text="{Binding Name, Source={StaticResource MySharedDataContext}" />

如果你想发送 Name 值,最好不要直接访问 TextBox,而是在你的 MySharedDataContext 中设置它 class:

var dataContext = (MySharedDataContext)FindResource("MySharedDataContext");
dataContext.Name = "John Smith";