gpt4 book ai didi

c# - 从 C# WPF 应用程序中的代码初始化静态资源

转载 作者:行者123 更新时间:2023-11-30 18:05:43 24 4
gpt4 key购买 nike

我有两个 WPF 窗口。主要包含一个网格绑定(bind)到 ObservableCollection<Person> .我可以在列表中添加和删除对象(人)。我还有另一个窗口,当我修改一个人时可以显示它。

Person 具有三个属性:Name、LastName 和 Age,并正确实现了 INotifyPropertyChanged。在新窗口中,我有 3 个文本框绑定(bind)到名为“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 属性的值。

如何解决?

最佳答案

Person 是您的 model 对象。不要将其用作 StaticResource,而是将其放在您绑定(bind)的属性中。

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

关于c# - 从 C# WPF 应用程序中的代码初始化静态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5299529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com