(UWP)如何从DataTemplate内访问我代码后台文件?

3

这基本上是一个数据绑定问题。

简单地说,我有一个ListView,它的项是生成的,并使用DataTemplate来呈现这些项。然而,在DataTemplate中,DataContext会更改为正在使用的x:DataType,因此我无法访问位于我的code-behind C#文件中的属性,甚至无法访问ViewModel中包含的属性。

希望我表达得清楚:

<ListView 
    x:Name="MyListView"
    ItemsSource="{x:Bind mainViewModel.AdvancedNoteCollection, Mode=OneWay}">
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="Models:Note">
            <Grid>
                <TextBlock Text="{ When trying to bind, I am stuck within the DataContext of the Note data type! }" />
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>    
</ListView>

然而,在现实中,我的DataTemplate位于外部ResourceDictionary文件中,这让我的情况有点更具挑战性。尽管外部ResourceDictionary有自己的代码后备文件,但我仍可以使用x:Bind除了传统的Binding。


这是问题所在...虽然可以通过语义实现,但 DataTemplate 不应该有任何代码后台。如果我要给你任何建议,我会说永远不要为它编写任何代码后台。如果您需要控件对代码进行操作,则建议使用自定义控件或用户控件,并在 DataTemplate 中使用它们。原因是 DataTemplate 技术上只能操作其绑定的数据,并且主要用于操作 UI。在这种情况下,如果可能的话,请将逻辑编写到自定义控件中,并在模板中引用它。 - undefined
谢谢回复。不过,我需要更清楚地理解你的意思。你是说我不应该将代码后台文件与我的ResourceDictionary文件关联起来吗?我问这个问题是因为我从一些微软的示例代码中得到了这个想法。他们明确表示可以这样使用。 - undefined
现在,在那个ResourceDictionary中,我碰巧有一个DataTemplate资源,除了其他几个资源之外。因此,DataTemplate本身没有自己的代码后台文件。持有DataTemplate的ResourceDictionary有一个代码后台文件。 - undefined
不,我完全没有这样说。在资源字典中的代码后台启用x:Bind,并用于其他事情......数据模板本身不应该与代码后台关联。这是语义学,如果你一定要这样做,你可以这样做,但这不是它设计的使用方式。 - undefined
这是我经常遇到的一个问题,我总是参考这篇文章https://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/ (我不知道它是否适用于UWP,因为我只在WPF中使用过它)。 - undefined
1个回答

0
尝试将位于您的ListView上的TextBlock的DataContext设置为Page,使用ElementName绑定(而不是x:Bind)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接