绑定代码问题

时间:2011-01-28 16:24:48

标签: c# wpf data-binding listview binding

我使用的窗口有两个用途。在我的窗口中,我有一个listview,我想根据目的绑定到DIFFERENT对象。

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

所以最初我有这个。

<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);

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

我需要的原因是,第一个窗口类型是文件的LIST,其中第二个窗口类型只有一个文件,所以用一个文件显示一个列表框是不对的。

谢谢和问候, 千电子伏

1 个答案:

答案 0 :(得分:2)

如果您的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-clause之外或者我认为在Xaml中)