Я новичок в WPF и попробовал простое раскрывающееся меню со списком ItemsSource
. Мой ComboBox, к сожалению, остается пустым, а мой список должен быть в порядке.
Ребята, вы можете мне помочь?
Мой XAML:
<Window x:Class="ProjectX.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:ProjectX.ViewModel"
xmlns:local="clr-namespace:ProjectX"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800"
DataContext="{DynamicResource ViewModelMain}">
<Window.Resources>
<vm:ViewModelMain x:Key="ViewModelMain"/>
</Window.Resources>
<Grid>
<ComboBox ItemsSource="{Binding WaageListe}" DisplayMemberPath="{Binding Waage}" />
</Grid>
</Window>
А вот и моя ViewModel:
using ProjectX.Model;
using System.Collections.ObjectModel;
namespace ProjectX.ViewModel
{
public class ViewModelMain : ViewModelBase
{
public ObservableCollection<Waage> waageListe;
public ObservableCollection<Waage> WaageListe
{
get => waageListe;
set
{
RaisePropertyChanged("WaageListe");
}
}
public ViewModelMain()
{
WaageListe = new ObservableCollection<Waage>
{
new Waage {Name="Hamburg - 1"},
new Waage {Name="Hamburg - 2"},
new Waage {Name="Hamburg - 3"},
};
}
}
}
2 ответа
Установите DisplayMemberPath
на "Имя". Вы также должны правильно установить DataContext
:
<Window x:Class="ProjectX.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:ProjectX.ViewModel"
xmlns:local="clr-namespace:ProjectX"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<vm:ViewModelMain />
</Window.Resources>
<Grid>
<ComboBox ItemsSource="{Binding WaageListe}" DisplayMemberPath="Name" />
</Grid>
</Window>
«Имя» - это общедоступное свойство класса Waage
.
Вы также можете определить ItemTemplate
:
<ComboBox ItemsSource="{Binding WaageListe}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Waage
- это имя типа, но не имя свойства.
Использовать это:
<Window x:Class="ProjectX.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:ProjectX.ViewModel"
xmlns:local="clr-namespace:ProjectX"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<vm:ViewModelMain />
</Window.DataContext>
<Grid>
<ComboBox ItemsSource="{Binding WaageListe}" DisplayMemberPath="Name"/>
</Grid>
А также:
using ProjectX.Model;
using System.Collections.ObjectModel;
namespace ProjectX.ViewModel
{
public class ViewModelMain : ViewModelBase
{
public ObservableCollection<Waage> WaageListe {get;} = new ObservableCollection<Waage>();
public ViewModelMain()
{
WaageListe.Add(new Waage {Name="Hamburg - 1"});
WaageListe.Add(new Waage {Name="Hamburg - 2"});
WaageListe.Add(new Waage {Name="Hamburg - 3"});
}
}
}
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.