MVVM 分布对象
MVVM Distribute Objects
也许这只是解决方案的一小步,但到目前为止我还无法解决。
我为 DataContext
和 Binding
做了一些 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}"/>
这将是结果:
这是一个简单的例子,没有问题运行并且理解这一点,但我想要的是:
- 从后面的代码中填写
TextBox
和 Label
。我试图命名 TextBox
tb 然后调用 tb.Text = "some text"
- 它有效。我还尝试为 TextBox
和 Label
分配一个 DataContext
,然后创建一个对象并用该对象 填充 DataContext - 这个也有效。
- 正在将
Label
放在另一页上。
问题2对我来说真的很难,尤其是结合问题1。
例如:当我在第 1 页构造函数中创建对象并将其分配给 DataContext
(当然)时,只有第 1 页上的 TextBox
将包含该值。
我只是不知道如何将我在第 1 页中声明的这个对象与第 2 页共享,以将其也设置为 DataContext
。
也许我只是没有找到完美的教程或解释来让我理解 DataContext
和 Binding
的真正工作原理以及我如何在页面和 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";
也许这只是解决方案的一小步,但到目前为止我还无法解决。
我为 DataContext
和 Binding
做了一些 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}"/>
这将是结果:
这是一个简单的例子,没有问题运行并且理解这一点,但我想要的是:
- 从后面的代码中填写
TextBox
和Label
。我试图命名TextBox
tb 然后调用tb.Text = "some text"
- 它有效。我还尝试为TextBox
和Label
分配一个DataContext
,然后创建一个对象并用该对象 填充 DataContext - 这个也有效。 - 正在将
Label
放在另一页上。
问题2对我来说真的很难,尤其是结合问题1。
例如:当我在第 1 页构造函数中创建对象并将其分配给 DataContext
(当然)时,只有第 1 页上的 TextBox
将包含该值。
我只是不知道如何将我在第 1 页中声明的这个对象与第 2 页共享,以将其也设置为 DataContext
。
也许我只是没有找到完美的教程或解释来让我理解 DataContext
和 Binding
的真正工作原理以及我如何在页面和 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";