Проблема привязки дерева WPF с использованием методов - PullRequest
0 голосов
/ 15 декабря 2010

Я связал WPF TreeView с ObservableCollection.Когда узел подключения расширяется в пользовательском интерфейсе, я хочу, чтобы вызывался Connection.GetDatabases (), который возвращает коллекцию баз данных.

Я использую HierarchicalDataTemplate:

<HierarchicalDataTemplate DataType="{x:Type dbcore:Connection}" ItemsSource="<WHAT GOES HERE?>">
            <StackPanel Orientation="Horizontal">
                <Image Source="{StaticResource DataServerIcon}" Margin="5,2" />
                <TextBlock Text="{Binding Converter={StaticResource connToStringConverter}}" />
            </StackPanel>
</HierarchicalDataTemplate>

Но поскольку я хочу использовать метод вместо свойства, я не уверен, что использовать в свойстве ItemsSource.

Ответы [ 3 ]

2 голосов
/ 15 декабря 2010

Поскольку вы хотите получить значения при расширении элемента, вы не можете сделать это в XAML во время разработки. Вы можете сделать это, когда ваш элемент развернут в коде:

<TreeView TreeViewItem.Expanded="OnExpanded" ... >


private void OnExpanded(object sender, RoutedEventArgs e)
{
      TreeViewItem tvi = e.OriginalSource as TreeViewItem;
      if (tvi != null)
      {
        tvi.Focus(); // to ensure the expanded item is selected
        tvi.ItemsSource = ((Connection)myTreeView.SelectedItem).GetDatabases();
      }
}
0 голосов
/ 15 декабря 2010

Почему бы просто не использовать свойство, которое будет возвращать данные любым удобным вам методом / сервисом?Вы не можете изначально привязать к методу;поэтому либо обращайтесь к вашему методу в свойствах getter, либо используйте IValueConverter и параметр, который может содержать метод для вызова.

0 голосов
/ 15 декабря 2010

Вы можете сделать IValueConverter, который берет ваш объект и вызывает метод.

Однако было бы намного проще и, возможно, немного быстрее, добавить свойство к исходному объекту, вызывающему метод.
Возможно, вы захотите добавить [Obsolete("Please call MyMethod() instead.", true)], чтобы предотвратить использование формы свойства в коде. (Это не помешает привязке данных)

...