【问题标题】:Binding in code question绑定代码问题
【发布时间】:2011-06-17 08:46:06
【问题描述】:

我正在使用有两个目的的同一个窗口。在我的窗口内,我有一个列表视图,我想根据用途绑定到不同的对象。

实际上它只是一个接收导入文件的窗口。

所以最初我有这个。

<ListView Grid.Row="1" Name="_lvValues" 
    DataContext="{Binding ElementName=_listbox,Path=SelectedItem}" 
    ItemsSource="{Binding Path=DataTable(from selectedItemObject)}">

为了另一个目的,我不得不这样做

<ListView Grid.Row="1" Name="_lvValues" 
    DataContext="{Binding ElementName=ClassName,Path=Object}" 
    ItemsSource="{Binding Path=DataTable(from Object)}">

我想在窗口(构造函数)初始化期间的 if/else 语句中执行此操作。所以...

if (windowType == Type1)
     // SetBinding to using listbox
else
     // SetBinding to using Object

我在初始化组件后试过这个

        binding = new Binding("DataTable");
        binding.Source = new Binding("ListBox.SelectedItem");
        _lvValues.SetBinding(ListView.ItemsSourceProperty, binding);

但显然它不起作用,我不知道如何继续。

我需要这个的原因是,第一个窗口类型有一个文件列表,而第二个窗口类型只有一个文件,所以显示一个只有一个文件的列表框是不正确的。

感谢和问候, 凯夫

【问题讨论】:

  • 您不能使用每页一个列表的页面,并在选择文件时从文件列表页面更改为详细列表页面吗?

标签: c# wpf data-binding listview binding


【解决方案1】:

如果您的 Xaml 是对您的绑定的准确描述,您只需将其转换为两个生成的绑定;第一种情况应该是这样的:

Binding contextBinding = new Binding("SelectedItem");
contextBinding.Source = _listbox;
_lvValues.SetBinding(ListView.DataContextProperty, contextBinding);

Binding itemsBinding = new Binding("DataTable");
_lvValues.SetBinding(ListView.ItemsSourceProperty, itemsBinding);

第二种情况大概是这样的:

Binding contextBinding = new Binding("Object");
contextBinding.Source = ClassName;
_lvValues.SetBinding(ListView.DataContextProperty, contextBinding);

Binding itemsBinding = new Binding("DataTable");
_lvValues.SetBinding(ListView.ItemsSourceProperty, itemsBinding);

(由于 ItemsSource-Binding 始终相同,并且仅取决于 DataContext,您可以将其重构为在 if 子句之外或我认为完全在 Xaml 中)

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 2018-02-13
    • 2017-05-12
    • 2010-11-19
    • 2021-07-19
    • 1970-01-01
    • 2023-03-10
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多