dev*_*vha 17 wpf binding mvvm caliburn.micro windows-phone-8
在我的Windows Phone 8应用程序中,我有项目列表.我为列表项定义了ItemTemplate.
我想在每个项目中显示一个来自视图模型的值,而不是列表项本身.我应该如何设置从列表项到viewmodel的绑定.
我的数据模板是这样的:
<DataTemplate x:Key="template">
<StackPanel>
<TextBlock Text="{Binding Name}"/> <!-- From list item -->
<TextBlock Text="{Binding MyViewModel.Country ?? }"/> <!-- From view model -->
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
那么如何将Country属性绑定到视图模型,而不是列表项(在项目源中).
Roh*_*ats 41
由于您使用了标记问题WPF,我可以告诉您在WPF中执行此操作的方法,您可以验证是否可以在Windows Phone 8应用中重复使用.
首先,您可以为x:NameViewModel绑定到的根元素提供.说它的窗口,设置x:名称并使用绑定ElementName.
<Window x:Name="myWindow">
...
<DataTemplate x:Key="template">
<StackPanel>
<TextBlock Text="{Binding Name}"/> <!-- From list item -->
<TextBlock Text="{Binding DataContext.MyViewModel.Country,
ElementName=myWindow }"/> <!-- From view model -->
</StackPanel>
</DataTemplate>
</Window>
Run Code Online (Sandbox Code Playgroud)
其次,您可以尝试使用RelativeSourceVisual tree并获取根元素DataContext.
<DataTemplate x:Key="template">
<StackPanel>
<TextBlock Text="{Binding Name}"/> <!-- From list item -->
<TextBlock Text="{Binding DataContext.MyViewModel.Country,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=Window} }"/>
<!-- From view model -->
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
更重要的是,如果ListBox从根元素继承DataContext(即您没有在ListBox上显式设置DataContext).您也可以在ListBox上使用这两种方法来代替Window.
注 -如前所述这里,FindAncestor是不是为Windows手机8定义,但元素的名称确实工作.所以,尝试使用第一种方法,它应该适合你.
| 归档时间: |
|
| 查看次数: |
20808 次 |
| 最近记录: |