【问题标题】:Binding ItemsSource programmatically以编程方式绑定 ItemsSource
【发布时间】:2012-12-03 15:12:23
【问题描述】:

c# 代码中 this 的等价物是什么?

<ListView
    x:Name="taskItemListView"
    DataContext="{Binding SelectedItem, ElementName=itemListView}"
    ItemsSource="{Binding taskItems}">
...
</ListView>

我已经尝试了以下代码,但它似乎不起作用...

Binding b = new Binding();
b.Path = new PropertyPath("taskItems");

DependencyProperty dp = DependencyProperty.Register("itemsSource", typeof(object), typeof(object), null);
BindingOperations.SetBinding(taskItemListView, dp, b);

编辑

根据@sa_ddam213 的回答,这行得通:

Binding dataContextBinding = new Binding();
dataContextBinding.Path = new PropertyPath("SelectedItem");
dataContextBinding.Source = itemListView;
BindingOperations.SetBinding(taskItemListView, ListView.DataContextProperty, dataContextBinding );

Binding sourceBinding = new Binding();
sourceBinding.Path = new PropertyPath("taskItems");
BindingOperations.SetBinding(taskItemListView, ListView.ItemsSourceProperty, sourceBinding );

【问题讨论】:

    标签: c# xaml binding windows-runtime


    【解决方案1】:

    这样的东西应该可以工作:

    BindingOperations.SetBinding(taskItemListView, ListView.DataContextProperty, new Binding("SelectedItem") { Source = itemListView});
    BindingOperations.SetBinding(taskItemListView, ListView.ItemsSourceProperty, new Binding("taskItems") { Source = this });
    

    注意:“Source = this”this 等于持有 taskItemsSelectedItem 的类

    【讨论】:

    【解决方案2】:

    一个简单的方法是通过 SetValue:

    taskItemListView.SetValue(ListView.ItemsSourceProperty, this.Source);
    

    更多信息在这里:DependencyObject.SetValue method

    【讨论】:

      猜你喜欢
      • 2014-09-05
      • 2010-11-11
      • 2022-10-04
      • 2019-12-12
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      相关资源
      最近更新 更多