文本框值未保存到数据库

时间:2014-03-07 18:13:30

标签: c# xaml

我目前正在进行简单的地址绑定并保存到数据库,但是当我单击我的保存按钮时,它会保存,但文本框信息不会保存。它只是使另一个地址行充满空值。我相信它与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

2 个答案:

答案 0 :(得分:1)

您的控件绑定到SelectedAddressAddNewAddress()有效地丢弃存储在那里的任何内容,并使用“某处”的值创建一个新的Address对象。由于_address字段不绑定任何内容,因此它可能包含空值。

以下代码应该起作用并保存您在控件中输入的值:

public void AddNewAddress()
{
    using (var ctx = DB.Get())
    {
        ctx.Addresses.Add(SelectedAddress);
        ctx.SaveChanges();
    }
    OnPropertyChanged("SelectedAddress");
}

仅当Address包含一些自动生成的字段(例如,由数据库设置的ID字段)时,引发OnPropertyChanged才有用。否则,您可以完全省略它。

答案 1 :(得分:0)

那里似乎有些错误:

  • 正如Panagiotis所说,_address没有价值。
  • 您应该将上下文绑定到视图(文本框)。如果您在按下按钮后创建SelectedAddress,则在Textboxes和新SelectedAddress中输入的数据之间没有任何关系。你真的消除了它。