2011-01-28 3 views
0

Я использую то же окно, которое служит двум целям. В моем окне у меня есть список, который я хочу связать с РАЗЛИЧНЫМИ объектами на основе цели.Binding in code question

Фактически это просто окно, которое принимает файлы импорта.

Так что изначально у меня было это.

<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 (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

ответ

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 вообще, я думаю)