xaml - DataTemplate 中 ViewMode 的 WinRT 绑定(bind)数据

标签 xaml binding windows-runtime

我想将数据绑定(bind)到存储在 ViewModel 中的 DataTemplate 中。我尝试了几种方法但没有成功,WPF 的解决方案似乎不适用于 WinRT,例如 RelativeSource 的 AncestorType 属性。

<Page.DataContext>
    <local:ViewModel x:Name="ViewModel" />
</Page.DataContext>

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ListView ItemsSource="{x:Bind ViewModel.names}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="local:mydatatype">
                <StackPanel>
                    <TextBlock Text="{Binding Name}"/>
                    <!--Here I want a TextBlock to show the number-->
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</StackPanel>

这是 View 模型

public class ViewModel
{
    public int Number = 42;
    public List<mydatatype> names = new List<mydatatype>();
    public ViewModel()
    {
        names.Add(new mydatatype("name1"));
        names.Add(new mydatatype("name2"));
    }
}

public class mydatatype
{
    public string Name { get; set; }
    public mydatatype(string name)
    {
        this.Name = name;
    }
}

最佳答案

您可以通过给其他对象命名然后引用它来访问其他对象的 DataTemplate。使用这种技术,您应该能够访问其 DataContext 以直接绑定(bind)到 View 模型,甚至可以从 DataTemplate 中访问

<Page x:Name="PageRoot">
<Page.DataContext>
    <local:ViewModel x:Name="ViewModel" />
</Page.DataContext>

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" x:Name="MainPanel">
    <ListView ItemsSource="{x:Bind ViewModel.names}">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="local:mydatatype">
                <StackPanel>
                    <TextBlock Text="{Binding Name}"/>
                    <TextBlock Text="{Binding DataContext.Name, ElementName=PageRoot}"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</StackPanel>
</Page>

关于xaml - DataTemplate 中 ViewMode 的 WinRT 绑定(bind)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37789808/

相关文章:

java - 如何绑定(bind)超过 1 个 ReactFX observable?

c# - Windows Phone 8 上的应用程序之间的 UniqueDeviceID 不同

.net - WF4 AssignActivity - 多行语句中断设计器

xaml - 如何为不同的方向切换不同的 xaml

c# - VisualStateManager.GoToState() 忽略 useTransitions

c++ - PPL 任务何时在 UI 线程上执行?

c++ - 如何使用 WinRT 在 Windows 8 Metro 应用程序中播放声音文件?

c# - 使用 Windows Phone 在运行时加载 xaml viewmodel

wpf - 如何防止 ComboBox 中的 NewItemPlaceholder 行绑定(bind)到与 WPF 中的 DataGrid 相同的 DataTable

silverlight - 如何在 MVVM Light 中关闭 TabItem