【发布时间】:2017-08-05 12:03:00
【问题描述】:
我有一个页面,其中使用 DataTemplate 绑定到该内容的模型,例如:
<DataTemplate x:DataType="models:MyDataType">
... content ...
</DataTemplate>
在该内容中,我需要能够绑定 Click 事件。我需要该单击事件存在于设置为页面的 DataContext 的视图模型中:
<Page.DataContext>
<vm:MyViewModel x:Name="ViewModel">
</Page.DataContext>
但我真的很难让它编译。我尝试的每种方法都会导致编译错误“对象引用未设置为对象的实例”。
我知道我不能使用 x:Bind,因为它会绑定到 DataTemplate 的 DataContext,所以我一直在尝试使用 Binding,并且根据我读过的其他 SO 答案,它 似乎 em> 就像答案应该是:
Click="{Binding DataContext.Button_Click, ElementName=Page}"
其中页面定义为页面的 x:Name。我试过删除 DataContext。我已经尝试添加 ViewModel。
我误会了什么?难道不能做我想做的事吗?我尝试过使用代码隐藏,但我使用的是模板 10,它会将几乎所有内容都推送到视图模型上,这让我更难从代码隐藏中访问导航服务等内容。
【问题讨论】:
-
github.com/Windows-XAML/Template10/blob/master/Samples/Search/… 总有另一种方式。这是一个非常古老的示例,但它显示了使用 T10 完成绑定的一些最初方式,在代码隐藏中命名 ViewModel,但实例化也通过 XAML 标记进入视图。看看 MainPage 的视图。
-
另一种方式是通过行为
-
@mvermef,第一个例子是使用
x:Bind,它在数据模板中不起作用。在这里使用Behavior有点过头了。
标签: binding uwp datacontext uwp-xaml template10