Есть TreeView, у него есть шаблон для отображения нодов
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Child}">
<StackPanel Orientation="Horizontal">
<Image Source="????????"/>
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</sdk:HierarchicalDataTemplate>
У элемента, который биндится к Item есть не только свойство Name, но есть еще и свойство Type.
Как в биндинге прописать, что если Type == type1, то Image Source="type1.jpg", а если Type == type2 то Source="type2.jpg"?
Здравствуйте, skodnik, Вы писали:
S>Есть TreeView, у него есть шаблон для отображения нодов
S>S><sdk:HierarchicalDataTemplate ItemsSource="{Binding Child}">
S> <StackPanel Orientation="Horizontal">
S> <Image Source="????????"/>
S> <TextBlock Text="{Binding Path=Name}" />
S> </StackPanel>
S></sdk:HierarchicalDataTemplate>
S>У элемента, который биндится к Item есть не только свойство Name, но есть еще и свойство Type.
S>Как в биндинге прописать, что если Type == type1, то Image Source="type1.jpg", а если Type == type2 то Source="type2.jpg"?
Варианты следующие:
1. Триггер.
2. Custom markup extension.
3. Конвертер.
Если типов много, то лучше конвертер. Если берете из ресурсов , то вариант 2. Триггер неплохо использовать, когда 2-3 варианта.
Здравствуйте, skodnik, Вы писали:
S>Есть TreeView, у него есть шаблон для отображения нодов
S>S><sdk:HierarchicalDataTemplate ItemsSource="{Binding Child}">
S> <StackPanel Orientation="Horizontal">
S> <Image Source="????????"/>
S> <TextBlock Text="{Binding Path=Name}" />
S> </StackPanel>
S></sdk:HierarchicalDataTemplate>
S>У элемента, который биндится к Item есть не только свойство Name, но есть еще и свойство Type.
S>Как в биндинге прописать, что если Type == type1, то Image Source="type1.jpg", а если Type == type2 то Source="type2.jpg"?
Можно также использовать паттерн MVVM.
Создаете класс, представляющий модель (M):
// Model.cs
enum ModelType { One, Two }
class Model {
// ...
public string Name { get; set; }
public ModelType Type { get; }
// ...
}
Создаете модель представления (VM), основное назначение которой — это предоставление данных для привязки:
// ViewModel.cs
class ViewModel {
private readonly Model _model;
public ViewModel(Model model)
{
_model = model;
}
public string Name {
get { return _model.Name; }
set { /**/ }
}
public Uri ImageSource
{
get
{
switch(_model.Type)
{
case ModelType.One:
return new Uri(/*Uri первой картинки*/);
case ModelType.Two:
return new Uri(/*Uri второй картинки*/);
}
throw new NotImplementedException();
}
}
}
Представление(V) непосредственно содержится в XAML:
<!-- View.xaml -->
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Child}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImageSource}"/>
<TextBlock Text="{Binding Name}" />
</StackPanel>
</sdk:HierarchicalDataTemplate>
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. Мартин Фаулер