Привязка в коде вопроса - PullRequest
       14

Привязка в коде вопроса

0 голосов
/ 28 января 2011

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

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

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

<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 Ответ

2 голосов
/ 28 января 2011

Если ваш 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)

...