Привязка данных к SelectedItem в WPF Treeview

Я пытаюсь ответить по сети, но не получилось。 Большинство ответов содержит следующие строки:
byte [] bitmapArray = Base64.decode (content.split (",") [1], Base64.DEFAULT); bitmap = BitmapFactory.decodeByteArray (bitmapArray, 0, bitmapArray.length); это не работает

229
задан Ian Ringrose 13 February 2014 в 06:31
поделиться

4 ответа

Я знаю, что этой теме 10 лет, но проблема все еще существует ...

Первоначальный вопрос был «извлечь» выбранный элемент. Мне также нужно было «получить» выбранный элемент в моей модели просмотра (не установить его). Из всех ответов в этой теме ответ «Уэс» является единственным, который по-разному подходит к проблеме: если вы можете использовать «Выбранный элемент» в качестве цели для привязки данных, используйте его в качестве источника для привязки данных. Уэс сделал это с другим свойством представления, я сделаю это со свойством viewmodel:

Нам понадобятся две вещи:

  • Создайте свойство зависимости в viewmodel (в моем случае типа «MyObject», поскольку мое древовидное представление привязано к объекту типа «MyObject»)
  • Привязка из Treeview.SelectedItem к этому свойству в конструкторе представления (да, это код позади, но, вероятно, вы будете инициировать там также есть ваш текст данных)

Viewmodel:

public static readonly DependencyProperty SelectedTreeViewItemProperty = DependencyProperty.Register("SelectedTreeViewItem", typeof(MyObject), typeof(MyViewModel), new PropertyMetadata(OnSelectedTreeViewItemChanged));

    private static void OnSelectedTreeViewItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        (d as MyViewModel).OnSelectedTreeViewItemChanged(e);
    }

    private void OnSelectedTreeViewItemChanged(DependencyPropertyChangedEventArgs e)
    {
        //do your stuff here
    }

    public MyObject SelectedWorkOrderTreeViewItem
    {
        get { return (MyObject)GetValue(SelectedTreeViewItemProperty); }
        set { SetValue(SelectedTreeViewItemProperty, value); }
    }

Просмотреть конструктор:

Binding binding = new Binding("SelectedItem")
        {
            Source = treeView, //name of tree view in xaml
            Mode = BindingMode.OneWay
        };

        BindingOperations.SetBinding(DataContext, MyViewModel.SelectedTreeViewItemProperty, binding);
1
ответ дан 23 November 2019 в 03:43
поделиться

Это свойство существует: TreeView.SelectedItem

Но он доступен только для чтения, поэтому вы не можете назначить его через привязку, только получить его

45
ответ дан 23 November 2019 в 03:43
поделиться

Вы также можете использовать свойство TreeViewItem.IsSelected

6
ответ дан 23 November 2019 в 03:43
поделиться

Что ж, я нашел решение. Он убирает беспорядок, так что MVVM работает.

Сначала добавьте этот класс:

public class ExtendedTreeView : TreeView
{
    public ExtendedTreeView()
        : base()
    {
        this.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(___ICH);
    }

    void ___ICH(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        if (SelectedItem != null)
        {
            SetValue(SelectedItem_Property, SelectedItem);
        }
    }

    public object SelectedItem_
    {
        get { return (object)GetValue(SelectedItem_Property); }
        set { SetValue(SelectedItem_Property, value); }
    }
    public static readonly DependencyProperty SelectedItem_Property = DependencyProperty.Register("SelectedItem_", typeof(object), typeof(ExtendedTreeView), new UIPropertyMetadata(null));
}

и добавьте это в свой xaml:

 <local:ExtendedTreeView ItemsSource="{Binding Items}" SelectedItem_="{Binding Item, Mode=TwoWay}">
 .....
 </local:ExtendedTreeView>
39
ответ дан 23 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

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