我有两个WPF窗口。主要包含绑定到ObservableCollection<Person>
的网格。我可以从列表中添加和删除对象(人)。当我修改一个人时,我还可以显示另一个窗口。
Person有三个属性:Name,LastName和Age,并正确实现INotifyPropertyChanged。在新窗口中,我有3个文本框绑定到名为“person”的静态资源Person。
当我初始化新窗口时,我将Person对象提供给构造函数,然后我希望这个人属性显示在三个文本框中。
当下面的代码看起来像这样一切正常时:
public ModifyPerson(Person modPerson)
{
// ... some code
Person p = this.Resources["person"] as Person;
p.Name = modPerson.Name;
p.LastName = modPerson.LastName;
p.Age = modPerson.Age;
}
但我喜欢这样做:
public ModifyPerson(Person modPerson)
{
// ... some code
this.Resources["person"] = modPerson;
}
但是它不起作用。 (资源分配正确,但文本框不显示modPerson属性的值。
如何解决?
答案 0 :(得分:1)
人是你的model
对象。而不是使用StaticResource
将它放在您绑定到的属性中。
public ModifyPerson(Person modPerson)
{
personToModify = modPerson;
}
private Person personToModify;
public Person PersonToModify
{
get
{
return personToModify;
}
}
和XAML:
<StackPanel DataContext="{Binding PersonToModify}">
<TextBox Text="{Binding Name, Mode=TwoWay" />
<TextBox Text="{Binding LastName, Mode=TwoWay" />
<TextBox Text="{Binding Age, Mode=TwoWay" />
</StackPanel>
(为了简洁,我省略了标签)
您可以使用DynamicResource
代替StaticResource
,但使用Model
中的任何一个确实不是他们的预期用途,而应使用Binding
。< / p>
答案 1 :(得分:0)
答案 2 :(得分:0)
:
<TextBox Text="{Binding Name}"></TextBox>
<TextBox Text="{Binding LastName}"></TextBox>
<TextBox Text="{Binding Age}"></TextBox>
代码中的: 你需要一个UI绑定的副本,像这样,
public EditPlayerWindow(PlayerBO arg)
: this() {
this.source =arg;
this.view = new PlayerBO();
arg.CopyTo(this.view);
this.DataContext = view;
}
CopyTo喜欢:
public void CopyTo(PlayerBO player) {
player.Id = this.Id;
player.Name = this.Name;
player.CurrentPolicyVersion = this.CurrentPolicyVersion;
player.CreatedAt = this.CreatedAt;
player.UpdatedAt = this.UpdatedAt;
player.Description = this.Description;
player.MACAddress = this.MACAddress;
player.IPAddress = this.IPAddress;
player.Policy = Policy;
}
最后:
view.CopyTo(source);
然后保存来源。
愿它有所帮助!