WPF Binding ViewModel - PullRequest
       4

WPF Binding ViewModel

0 голосов
/ 27 мая 2019

Так что в настоящее время я пытаюсь изучить WPF с MVVM, и я следовал некоторым учебникам в Интернете.Теперь, когда у меня есть простой проект, я попытался сделать это самостоятельно, но каким-то образом ListBox остался пустым.Я думаю, это не связано с моделью представления.Что мне здесь не хватает?Любая помощь приветствуется.

Модель:

public class Person : INotifyPropertyChanged
{
    private string _vorname;
    private string _nachname;
    private string _email;

    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string property) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));

    public string Vorname
    {
        get { return _vorname; }
        set
        {
            _vorname = value;
            RaisePropertyChanged(nameof(Vorname));
        }
    }

    public string Nachname
    {
        get { return _nachname; }
        set
        {
            _nachname = value;
            RaisePropertyChanged(nameof(Nachname));
        }
    }

    public string Email
    {
        get { return _email; }
        set
        {
            _email = value;
            RaisePropertyChanged(nameof(Email));
        }
    }

}

Вид:

<UserControl.Resources>
    <DataTemplate x:Key="personenTemplate">
        <StackPanel Orientation="Horizontal">
            <TextBox Width="200" Margin="3,5,3,5"
                     Text="{Binding Path=Vorname, Mode=TwoWay}" />
            <TextBox Width="200" Margin="0,5,3,5"
                     Text="{Binding Path=Nachname, Mode=TwoWay}" />
            <TextBox Width="200" Margin="0,5,3,5"
                     Text="{Binding Path=Email, Mode=TwoWay}" />
        </StackPanel>
    </DataTemplate>
</UserControl.Resources>

<Grid>
    <StackPanel Orientation="Horizontal">
        <ListBox Width="500"
                 ItemTemplate="{StaticResource personenTemplate}"
                 ItemsSource="{Binding Personen}" />
    </StackPanel>
</Grid>

ViewModel:

public class PersonViewModel
{
    ObservableCollection<Person> Personen { get; set; } = new ObservableCollection<Person>();

    public PersonViewModel()
    {
        Personen.Add(new Person { Vorname = "My", Nachname = "Name", Email = "my@name.com" });
        Personen.Add(new Person { Vorname = "Max", Nachname = "Mustermann", Email = "max@mustermann.de" });
        Personen.Add(new Person { Vorname = "John", Nachname = "Doe", Email = "john@doe.com" });
        Personen.Add(new Person { Vorname = "Jane", Nachname = "Doe", Email = "jane@doe.com" });
    }
}

}

Кроме того, я устанавливаю свой DataContext следующим образом на моем [..] View.xaml.cs

public PersonenView()
{
    InitializeComponent();
    this.DataContext = new ViewModel.PersonViewModel();
}

1 Ответ

5 голосов
/ 27 мая 2019

Вам просто нужно предоставить открытый доступ к ObservableCollection Personen в вашей ViewModel.

Вам также следует сделать свойство доступным только для чтения (или вызвать уведомление об изменении свойства из его установщика):

public ObservableCollection<Person> Personen { get; }
    = new ObservableCollection<Person>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...