首页 > 解决方案 > 带有 MVVM 的 WPF:无法在不同页面的文本框中写入/读取数据

问题描述

所以我一直在为我的最终项目制作这个程序。我在我的 WPF 中使用标签控件中的页面给我们。在这些页面中,用户填写页面中的所有数据,然后按一个按钮,将保存数据并将其发送到服务器。或者他们可以从服务器加载数据,数据应该出现在 MVVM 的文本框中。但它没有,也没有从文本框中读取任何数据。我无法弄清楚我做错了什么。下面是我的一些代码(它有 59 个项目,所以我只显示一些)。并且只有来自服务器的插入。因为如果解决了这个问题,我认为保存/更新也很容易修复。先感谢您

Window.xaml.cs -

public void DataInlezen(string Json)
{
    DataGebruiker viewmodel = new DataGebruiker();
    var Djson = JsonConvert.DeserializeObject<JsonCS>(Json);

    foreach (var AlgeInf in Djson.algemeneInformatie)
    {
        viewmodel.Achternaam = AlgeInf.Achternaam;
        viewmodel.Voornaam = AlgeInf.Voornaam;
        viewmodel.Straat = AlgeInf.Straat;
        viewmodel.Huisnummer = AlgeInf.Huisnummer;
        viewmodel.Postcode = AlgeInf.Postcode;
        viewmodel.Stad = AlgeInf.Stad;
        viewmodel.Email = AlgeInf.Email;
        viewmodel.GSM = AlgeInf.GSM;
        viewmodel.Beroep = AlgeInf.Beroep;
        viewmodel.Leeftijd = AlgeInf.Leeftijd;
        viewmodel.Geslacht = AlgeInf.Geslacht;
    }

模型 -

public class DataGebruiker : INotifyPropertyChanged
{
    private string _Achternaam;
    public string Achternaam
    {
        get
        {
            return _Achternaam;
        }
        set
        {
            _Achternaam = value;
            OnPropertyChanged("Achternaam");
        }
    }
    private string _Voornaam;
    public string Voornaam
    {
        get
        {
            return _Voornaam;
        }
        set
        {
            _Voornaam = value;
            OnPropertyChanged("Voornaam");
        }
    }

//more stuff
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

视图模型 -

internal class DataGebruikerViewModel
{
    private readonly DataGebruiker _DataGebruiker;
    public DataGebruikerViewModel()
    {
        _DataGebruiker = new DataGebruiker();
    }        

    public DataGebruiker DataGebruiker
    {
        get
        {
            return _DataGebruiker;
        }
    }

XAML -

<Page.DataContext>
        <local:DataGebruikerViewModel/>
</Page.DataContext>
<!--some layout stuff-->

<TextBox Name="TextBoxAchternaam" Grid.Column="1" Grid.Row="0" Text="{Binding DataGebruiker.Achternaam}" FontSize="24" VerticalContentAlignment="Center" Margin="6" />
<TextBox Name="TextBoxVoornaam" Grid.Column="1" Grid.Row="1" Text="{Binding DataGebruiker.Voornaam}" FontSize="24" VerticalContentAlignment="Center" Margin="6" />

<Button Name="ButtonOpzoeken" Grid.Column="1" Content="Opzoeken" Grid.Row="8" Width="150" HorizontalAlignment="Center"  FontSize="24" Click="ButtonOpzoeken_Click"/> //button to save

标签: c#wpfdata-binding

解决方案


我相信这是因为绑定在视图中的 DataGebruiker 的实例与 DataInlezen 方法实例化的实例不同。


推荐阅读