也许这只是解决方案的一小步,但到目前为止还无法实现。
我为DataContext
和Binding
做了一些WPF教程,但我无法理解如何在(例如)两页之间共享上下文和/或绑定。
例如,当你看到这个时: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"
- 它就可以了。我还尝试为DataContext
和TextBox
分配Label
,然后创建一个对象并使用该对象填充 DataContext - 这也有效。 Label
放在另一页上。问题2对我来说真的很难,特别是与问题1相结合。
例如:当我在第1页构造函数中创建对象并为其分配DataContext
(ofcourse)时,只有第1页上的TextBox
将包含该值。
我根本不知道如何分享我在第1页和第2页中声明的这个对象,并将其设置为DataContext
。
也许我还没有找到完美的教程或解释,让我了解DataContext
和Binding
如何真正起作用,以及如何在页面和窗口之间共享对象。
你们可以帮助我吗?
如果您需要更多信息,请随时提问;)
答案 0 :(得分:0)
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类中设置它:
var dataContext = (MySharedDataContext)FindResource("MySharedDataContext");
dataContext.Name = "John Smith";