Я пытаюсь ответить по сети, но не получилось。 Большинство ответов содержит следующие строки:
byte [] bitmapArray = Base64.decode (content.split (",") [1], Base64.DEFAULT); bitmap = BitmapFactory.decodeByteArray (bitmapArray, 0, bitmapArray.length); это не работает
Я знаю, что этой теме 10 лет, но проблема все еще существует ...
Первоначальный вопрос был «извлечь» выбранный элемент. Мне также нужно было «получить» выбранный элемент в моей модели просмотра (не установить его). Из всех ответов в этой теме ответ «Уэс» является единственным, который по-разному подходит к проблеме: если вы можете использовать «Выбранный элемент» в качестве цели для привязки данных, используйте его в качестве источника для привязки данных. Уэс сделал это с другим свойством представления, я сделаю это со свойством viewmodel:
Нам понадобятся две вещи:
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);
Это свойство существует: TreeView.SelectedItem
Но он доступен только для чтения, поэтому вы не можете назначить его через привязку, только получить его
Вы также можете использовать свойство TreeViewItem.IsSelected
Что ж, я нашел решение. Он убирает беспорядок, так что 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>