Доброго времени суток. Нашел массу информации по интересующей проблеме, но ни один пример не удалось применить на своем проекте. Загвоздка в том, что в TreeView вложены разные по типу данные и как их выбрать не могу понять. Вот Model
public class Algorithms
{
public AlgorithmsType TypeName { get; set; }
public List<Algorithm> Algorithm { get; set; }
}
public class Algorithm
{
public string Name { get; set; }
public string Text { get; set; }
}
Далее ViewModel
public class AlgorithmsViewModel : ViewModelBase
{
private Algorithm _selectedAlgorithm;
public Algorithm SelectedAlgorithm
{
get { return _selectedAlgorithm; }
set
{
_selectedAlgorithm = value;
RaisePropertyChanged();
}
}
public List<Algorithms> AlgorithmList { get; set; }
public AlgorithmsViewModel()
{
}
}
} И View
<Window.Background>
<RadialGradientBrush>
<GradientStop Color="#FF7831AA" Offset="1"/>
<GradientStop Color="#FFDDB7F7" Offset="0.009"/>
</RadialGradientBrush>
</Window.Background>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="106*"/>
<ColumnDefinition Width="181*"/>
</Grid.ColumnDefinitions>
<StackPanel CanVerticallyScroll="True" Grid.Column="1" Margin="0,0,0,10">
<Border BorderThickness="5" BorderBrush="#FFF9F8F7" Margin="10,10,10,10" Height="242">
<TextBox Text="{Binding SelectedAlgorithms}" IsReadOnly="True" TextWrapping="Wrap" Margin="5"/>
</Border>
</StackPanel>
<Button x:Name="btnGo" Content="Перейти" HorizontalAlignment="Left" Margin="274,257,0,0" VerticalAlignment="Top" Width="75" Grid.Column="1" Height="22"/>
<TreeView x:Name="tvAlgorithms" ItemsSource="{Binding AlgorithmList}" Grid.Column="0" HorizontalAlignment="Left" Height="269" VerticalAlignment="Top" Width="198" Margin="10,10,0,0">
<TreeView.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding Algorithm}" DataType="{x:Type models:Algorithms}">
<Label>
<Label.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding TypeName}" Value="Symmetrical">
<Setter Property="Label.Content" Value="Симетрические"/>
</DataTrigger>
<DataTrigger Binding="{Binding TypeName}" Value="Asymmetric">
<Setter Property="Label.Content" Value="Асиметрические"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type models:Algorithm}">
<Label Content="{Binding Name}"/>
</DataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
Так вот, каким образом мне заполучить заветный объект Algorithm, чтобы дальше с ним работать?
SelectedItem в TreeView нет, но можно добиться желаемого результата, например так:
Подписываемся на обработчик события SelectedItemChanged в TreeView:
<TreeView SelectedItemChanged="TreeView_SelectedItemChanged">
дальше в обработчике проверяем, если выделенный элемент имеет тип Algorithm, присваиваем его SelectedAlgorithm.
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var vm = this.DataContext as AlgorithmsViewModel;
if (vm != null)
{
vm.SelectedAlgorithm = e.NewValue as Algorithm;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В этом примере в зависимости от object value - название пункта дерева (типа string) определяется картинка в дереве
Имеется приложение WPF, из которого нужно запустить другое небольшое приложение WPF в виде исполнимого файла (exe) с параметрами, передаваемыми...
Приложение запускает Service по нажатию на кнопку, в котором начинает тикать таймер