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

时间:2011-03-14 13:55:30

标签: c# wpf initialization resourcedictionary

我有两个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属性的值。

如何解决?

3 个答案:

答案 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)

在XAML中

<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);

然后保存来源。

愿它有所帮助!