Привязка ObservableCollection к ComboBox в приложении WPF с MVVM - PullRequest
0 голосов
/ 23 октября 2018

Я новичок в 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 ]

0 голосов
/ 23 октября 2018

Установите 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 - это имя типа, но не имя свойства.

0 голосов
/ 23 октября 2018

Используйте это:

<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"});
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...