Где свойство IsSynchronizedWithCurrentItem (или эквивалентно) для TreeView?

Ваша таблица должна иметь тот же столбец CSV.

DECLARE     @STR_COMMAND NVARCHAR(max)
DECLARE     @patch VARCHAR(max)

set @patch = ''/*path to csv*/
SELECT @STR_COMMAND = 'BULK INSERT /*table*/ FROM ''' +@patch+ '''
WITH
(

FIELDTERMINATOR = '';'',
ROWTERMINATOR = ''\n''
)'
EXEC SP_EXECUTESQL @STR_COMMAND;
6
задан Gishu 17 December 2008 в 09:50
поделиться

4 ответа

<ListView Name="listView1" 
    ItemsSource="{Binding Path=SelectedItem.Modules, 
                          ElementName=treeView1, Mode=OneWay}" 
    IsSynchronizedWithCurrentItem="True">

Где".Modules"набор дочерних объектов от выбранного treeview объекта, который Вы хотите отобразить. Не волнуйтесь об обеспечении электричеством"SelectedItemChanged"событие на treeview.

4
ответ дан 8 December 2019 в 18:43
поделиться

Почему точно это не реализует свойство, я не знаю, но у меня есть предложение вниз ниже.

Ваш код выше будет работать, однако, это не то, что делает свойство IsSynchronizedWithCurrentItem. Любой ItemsControl связывает с ICollectionView свойства ItemsSource. Для получения того ICollectionView мы можем назвать CollectionViewSource. GetDefaultCollectionView (возражают o). В зависимости от типа объекта o, Вы получаете другую конкретную реализацию ICollectionView inteface. CollectionView и ListCollectionView являются двумя реальными классами, которые приходят на ум.

Интерфейс ICollectionView содержит участника под названием CurrentItem. То, что делает IsSynchronizedWithCurrentItem: каждый раз, когда объект нажат на ItemsControl, он устанавливает CurrentItem для представления набора. ICollectionView также имеет два события: CurrentItemChanging и CurrentItemChanged. Когда свойство IsSynchronizedWithCurrentItem будет установлено, ItemsControl обновит SelectedItem на основе того, каков CurrentItem ICollectionView. Имеет смысл?

В ведущем устройстве/детали сценарии WPF мы просто связываем с ICollectionViews, и их CurrentItem (синтаксис CurrentItem - что-то как {Привязка Объектов/Имени}, где Имя является свойством Name на CurrentItem набора.

Таким образом, хотя Ваш код работает на Ваши цели, он не делает то, что делает то свойство. Чтобы сделать, что делает свойство, необходимо сделать следующее:

  1. Когда объект выбран, необходимо выяснить, какому набору он принадлежит. Как мы делаем это? Я полагаю, что это - то, почему TreeView не реализует его. Выбранный пункт отображен в TreeViewItem. DataContext является самим объектом, но каков родительский набор? Я предполагаю для получения его, Вы могли или кэшировать его в некотором hashmap (глупый, но будет работать), или можно идти по логическому дереву и получить родителя TreeViewItem, который, оказывается, ItemsControl. Свойство ItemsSource будет Вашим набором.
  2. Получите ICollectionView для того набора.
  3. Должен бросить тот ICollectionView в CollectionView (ICollectionView не реализует метод set CurrentItem),
  4. Назовите SetCurrent (....) на экземпляре CollectionView

Теперь, что-либо, что связывается с тем, что CurrentItem ICollectionView будет обновлен.

Это стало длиннее, чем я ожидал. Сообщите мне, необходимо ли дальнейшее разъяснение.

3
ответ дан 8 December 2019 в 18:43
поделиться

Действительно простое решение состоит в том, чтобы связать Ваши "детали" элементы UI со свойством SelectedValue TreeView. Например, если Ваш TreeView был похож на это:

<TreeView Name="CategoryName" ItemsSource="{Binding Source={StaticResource A_Collection}, Path=RootItems}" />

Затем Вы могли связать, детализирует элементы UI (как текстовое поле) использование:

<TextBox Text="{Binding ElementName=CategoryTreeView, Path=SelectedValue.Name}"/>

Заставил бы текстовое поле быть связанным со свойством Name объектов, в настоящее время выбираемых в TreeView.

Если Вы хотите связать много объектов UI как детали для выбранного объекта TreeView, рассмотреть установку DataContext на elemtent, который содержит средства управления всеми подробностями (DockPanel / Сетка / StackPanel, и т.д.).

6
ответ дан 8 December 2019 в 18:43
поделиться

Мое решение этого оказалось довольно крошечным.. не знайте, эквивалентно ли это IsSynchronizedWithCurrentItem. ListView обновляется как ожидалось.

// the XAML
<TreeView DockPanel.Dock="Left" x:Name="tvwNodes" ItemsSource="{Binding}" SelectedItemChanged="OnNewNodeSelected"/>
<ListView x:Name="lvwProperties" ItemsSource="{Binding Path=Properties}"

// the code-behind
private void OnNewNodeSelected(object sender, RoutedPropertyChangedEventArgs<object> e)
{
  lvwProperties.DataContext = tvwNodes.SelectedItem; // this returns the selected Node obj
}
0
ответ дан 8 December 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: