我目前正在进行简单的地址绑定并保存到数据库,但是当我单击我的保存按钮时,它会保存,但文本框信息不会保存。它只是使另一个地址行充满空值。我相信它与get; set;对于绑定值。如果有人能帮我弄清楚为什么文本框值不能保存,谢谢你。
Xaml方:
<TextBox x:Name="Line1" Text="{Binding SelectedAddress.Line1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<TextBox x:Name="City" Text="{Binding SelectedAddress.City, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Text="{Binding SelectedAddress.PostalCode, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
MVVM方面:
public Address NewAddress { get; set; }
public string Line1 { get { return _address.Line1; } set { _address.Line1 = value; } }
public string City { get { return _address.City; } set { _address.City = value; } }
public string PostalCode{ get { return _address.PostalCode; } set { _address.PostalCode = value; } }
我也已经发起了:
public AddressViewModel(IEventAggregator events)
{
.....
_address = new Address();
}
按钮操作:
public void AddNewAddress()
{
SelectedAddress = new Address();
SelectedAddress.Line1 = _address.Line1;
SelectedAddress.PostalCode = _address.PostalCode;
SelectedAddress.City = _address.City;
OnPropertyChanged("SelectedAddress");
using (var ctx = DB.Get())
{
ctx.Addresses.Add(SelectedAddress);
ctx.SaveChanges();
}
}
我还将上一篇文章中的OnPropertyChange实现为“Notify” Binding a String to a richtextbox
答案 0 :(得分:1)
您的控件绑定到SelectedAddress
但AddNewAddress()
有效地丢弃存储在那里的任何内容,并使用“某处”的值创建一个新的Address对象。由于_address
字段不绑定任何内容,因此它可能包含空值。
以下代码应该起作用并保存您在控件中输入的值:
public void AddNewAddress()
{
using (var ctx = DB.Get())
{
ctx.Addresses.Add(SelectedAddress);
ctx.SaveChanges();
}
OnPropertyChanged("SelectedAddress");
}
仅当Address包含一些自动生成的字段(例如,由数据库设置的ID字段)时,引发OnPropertyChanged
才有用。否则,您可以完全省略它。
答案 1 :(得分:0)
那里似乎有些错误: