2011-01-28 70 views
0

我使用的是同一个窗口,它有两个作用。在我的窗口内,我有一个listview,我想根据目的绑定到不同的对象。代码中的绑定问题

其实它只是一个窗口,需要在导入文件。

所以最初我有这个。

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

但显然它没有工作,我不知道如何着手。

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

感谢和问候, 千电子伏

+0

你不能使用每页都会有一个列表页面,然后选择一个文件时,从文件列表页面切换到详细列表页? – Nekresh 2011-01-28 16:34:00

回答

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时,绑定始终是相同的,只是取决于在DataContext你可以重构它是if子句之外,或在XAML总而言之,我认为)