我使用的窗口有两个用途。在我的窗口中,我有一个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,其中第二个窗口类型只有一个文件,所以用一个文件显示一个列表框是不对的。
谢谢和问候, 千电子伏
答案 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中)