2011-03-14 11 views
3

私は2つのWPFウィンドウを持っています。メインのものには、ObservableCollection<Person>にバインドされたグリッドが含まれています。私はリストからオブジェクト(人)を追加したり削除したりすることができます。私は人を変更するときに私が見ることができる別のウィンドウも持っています。C#WPFアプリケーションのコードから静的リソースを初期化する

Personには、Name、LastName、Ageの3つのプロパティがあり、INotifyPropertyChangedが正しく実装されています。新しいウィンドウには、静的リソースPersonにバインドされている3つのテキストボックスがあります。

新しいウィンドウを初期化すると、私はPersonオブジェクトをコンストラクタに提供します。そして、このPersonプロパティを3つのテキストボックスに表示します。

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

テキストボックスの定義方法を表示できますか? – CodeNaked

+0

NotifyPropertyChangedを確実に使用しましたか? –

+0

なぜこれに 'StaticResource'を使用していますか? – McAden

答えて

0

を使用してみてください:。?

<TextBox Text="{Binding Name}"></TextBox> 
<TextBox Text="{Binding LastName}"></TextBox> 
<TextBox Text="{Binding Age}"></TextBox> 
コード内

: uは

public EditPlayerWindow(PlayerBO arg) 
     : this() { 
     this.source =arg; 
     this.view = new PlayerBO(); 
     arg.CopyTo(this.view); 
     this.DataContext = view; 
    } 
、UIはこのように、結合のためのコピーが必要

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

ソースを保存します。

助けてもらえますか?

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> 

(私は簡潔にするために、ラベルを左)

あなたが代わりにStaticResourceDynamicResourceを使用することができますが、あなたのModelのためのそれらのいずれかを使用して、本当に」にISN代わりにBindingを使用する必要があります。

関連する問題