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”
-它可以工作。我还尝试为文本框
和标签
分配一个数据上下文
,然后创建一个对象并用该对象填充数据上下文-这也起到了作用
标签
放在另一页上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";