在使用WPF MVVM和命令时,我遇到了更新实体的问题。
我的WPF看起来像:
<Popup Margin="10,10,0,13" Name="UpdatePopup" HorizontalAlignment="Left" VerticalAlignment="Top" Width="450" Height="100" IsOpen="{Binding IsOpen, Mode=TwoWay}">
<Border Padding="5" Background="WhiteSmoke">
<StackPanel Orientation="Horizontal" DataContext="{Binding CommendationEntity}" Width="450" Height="100">
<Label Content="Nazwa żódła" Margin="10,10,10,10" Width="75" Height="30"/>
<TextBox Text="{Binding Name}" Margin="10,10,10,10" Width="130" Height="30" x:Name="Name" />
<Button Command="{Binding DataContext.UpdateCommand, ElementName=UpdatePopup}" CommandParameter="{Binding id}" Content="Update" Margin="10,10,10,10" Width="80" Height="30"/>
<Button Command="{Binding DataContext.CancelCommand, ElementName=UpdatePopup}" Content="Anuluj" Margin="10,10,10,10" Width="80" Height="30"/>
</StackPanel>
</Border>
</Popup>
现在更新记录我需要id和新名称,所以我通过按钮绑定传递id,并且我在传递名称时遇到问题,我的更新方法如下:
public void UpdateEntity(object obj)
{
this.CommendationEntity = this._catalog.Commendations.Single(entity => entity.id == (int)obj);
this.CommendationEntity.Name = this.Name;
this._catalog.Commendations.Attach(this.CommendationEntity);
this._catalog.Entry(this.CommendationEntity).State = System.Data.Entity.EntityState.Modified;
this._catalog.SaveChanges();
}
在视图模型中,我有一个名为:
的属性 public string Name
{
get { return _name; }
set
{
if (_name == value)
{
return;
}
this._name = value;
RaisePropertyChanged("Name");
}
}
但是当我点击Update id作为(object obj)传递时,如果是,但是Name属性没有更新,那可能是什么错误?
也许它的数据上下文(DataContext =&#34; {Binding CommendationEntity}&#34;)作为模型名称和视图模型属性具有相同的名称?我是新的WPF,所以我错了。
或许有一种方法可以点击按钮,整个对象将作为(对象obj)传递?
答案 0 :(得分:1)
this.Name
表示Name属性与UpdateCommand属性属于同一个类,然后绑定到Name属性的路径应该以相同的方式设置:
<TextBox Text="{Binding DataContext.Name, ElementName=UpdatePopup}" Margin="10,10,10,10" Width="130" Height="30" x:Name="Name" />
否则您绑定到其他一些Name属性,或绑定完全失败。
答案 1 :(得分:0)
两种可能性:
DataContext.UpdateCommand, ElementName=UpdatePopup
的命令,所以也可能需要执行此操作。如果绑定失败,你不会得到异常,但你应该在VS的输出窗口中收到一条消息 - 值得在那里检查。if (_name == value)
(也许两者都是空字符串?)为真,那么名称将不会更新。 答案 2 :(得分:0)
根据您的代码,您尝试将CommendationEntity的Name属性与文本框控件绑定。它没有得到更新,因为您尚未为this.CommendationEntity.Name属性实现NotifyPropertyChanged。您需要在CommendationEntity中实现INotifyProperty以反映CommendationEntity类的属性更改。