2011-12-19 8 views
1

データをContentControlに手動で再バインドしようとしています。WPF ContentControlにデータを手動で再バインドします。

<UserControl.Resources> 
    <local:MyModel x:Key="myModel" /> 
    <DataTemplate DataType="{x:Type local:MyModel}">    
     <StackPanel> 
      <TextBlock Text="{Binding Path=Property1}"></TextBlock> 
     </StackPanel> 
    </DataTemplate> 
</UserControl.Resources> 
<Grid> 
<ContentControl Content="{Binding Source={StaticResource myModel}}" Name="myView"> 
</ContentControl> 
</Grid> 

そして

MyModel myModel = this.FindResource("myModel") as MyModel ; 
myModel.Property1 = "Test"; 
var bindingExpression = myView.GetBindingExpression(ContentControl.ContentProperty); 
bindingExpression.UpdateTarget(); 

の背後にあるコードではなく、私が何をしないのです、動作するようには思えないのですか?

+0

モデルはINotifyPropertyChangedを実装していますか?デバッグ出力にバインディングエラーがありますか? –

+0

あなたのContentControlの名前が 'myview'で、' cntView'を使ったコードビハインド以外は、StaticResourceへのバインディングと関係があると思います。静的とは通常は変更されないことを意味するため、WPFは一度バインドして忘れてしまいます。 – Rachel

+0

@Erno:モデルはINotifyPropertyChangedを実装していませんが、データを手動で再バインドしようとしている理由はありません。また、私はエラーを見ていない。 – exoz

答えて

1

Property1が変更されたときに変更イベントを発生しない場合、TextBoxはデータが変更され更新されたことを認識しません。

MyModelクラスをに設定し、Property1が変更されたときにPropertyChangedイベントを発生させると、正常に機能します。

また、ContentControl.Contentが変更されていないため、明示的にWPFに伝える必要はありません。それでも同じMyModelオブジェクトを指しています。

+0

実際に私は明示的なバインディング作業をしようとしている理由でモデルを変更できません。しかし、問題は正しいと言えます。 StaticResourceリソースの参照は変更されないため、更新は行われません。私がしたことは、MyViewModelでMyModelをラップし、コードビハインドでMyModelオブジェクトを再作成したことです。 – exoz