【问题标题】:Setting DataContext in a Listbox Declaratively以声明方式在列表框中设置 DataContext
【发布时间】:2023-03-17 10:55:01
【问题描述】:

我是这个 Silverlight 数据绑定主题的新手。我开始理解这种以声明方式进行数据绑定的方式有多酷。 为了试一试,我的 Page.xaml 中有这个列表框:

<ListBox Height="100" Name="lbCategories" Width="236" HorizontalAlignment="Left" Margin="20,0,0,0" SelectionMode="Multiple" ItemsSource="{Binding Categories}" DisplayMemberPath="Name" />

在我的 Page.xaml.cs 中,我有一个名为 Categories ObservableCollection 的公共属性。

如果我的 CS 文件中存在以下行,则它可以工作:

DataContext = this;

但我想避免任何编程数据绑定。我想在我的 ListBox 元素中以声明方式将 DataContext 设置为“this”。 有什么办法吗?

谢谢, 奥斯卡

【问题讨论】:

    标签: .net silverlight data-binding windows-phone-7


    【解决方案1】:

    您尝试替换的程序代码是:

    DataContext = this;
    

    表示您正在尝试将 ListBox 的 DataContext 设置为 UI 元素,这不是 DataContext 通常的使用方式。如果您有 UI 元素公开的属性,则根本不需要使用 DataContext,只需直接绑定到该元素即可。所以而不是:

    ItemsSource="{Binding Categories}"
    

    使用:

    ItemsSource="{Binding Categories, ElementName=mainWindow}"
    

    其中 mainWindow 是上面“this”引用的元素的名称,不设置 DataContext。

    如果出于某种原因您确实想以这种方式使用 DataContext,则可以在 ListBox 上使用此属性:

    DataContext="{Binding ElementName=mainWindow}"
    

    将 DataContext 设置为与您的代码隐藏文件对应的元素。

    【讨论】:

    • 嗨!感谢您的回答,这正是我想要的!并感谢您的简短解释!只缺少一个空白:Categories 属性在我的 Page.xaml.cs 文件中(在 Silverlight 中是这样完成的吗?)。我必须以这种方式添加 ElementName 道具:ElementName=Page,对吗?但如果我这样做,我的项目不会显示。 :(对不起,如果问题很愚蠢:(
    • 如果你的页面还没有名字,给它一个:
    【解决方案2】:

    将其绑定到您在 XAML 中定义的静态资源,如 this example

    【讨论】:

    • 嗨!谢谢!我不想创建一个额外的类来保存我的类别列表,这就是阻止我这样做的原因:(
    猜你喜欢
    • 2014-11-15
    • 2018-09-21
    • 2014-07-29
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多