2011-12-19 100 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?調試輸出是否給出了任何綁定錯誤? – 2011-12-19 14:47:16

+0

除了使用'cntView'命名你的ContentControl被命名爲'myview'和你的代碼隱藏之外,我不得不猜測它與綁定到StaticResource有關。靜態通常意味着它不會改變,所以WPF綁定一次並忘記它。 – Rachel 2011-12-19 14:48:59

+0

@Erno:沒有模型沒有實現INotifyPropertyChanged,但這就是爲什麼我試圖手動重新綁定數據。另外我沒有看到任何錯誤。 – exoz 2011-12-19 15:09:17

回答

1

如果Property1在更改時未引發更改事件,則TextBox不知道數據已更改並且未更新。

當你的MyModel類執行INotifyPropertyChanged,並提高PropertyChanged事件Property1改變時,它會工作。

此外,您不需要明確告訴WPF ContentControl.Content已經更改,因爲它沒有。它仍然指向相同的MyModel對象。

+0

其實我不能改變這個模型,這就是爲什麼我試圖做明確的綁定工作。但你是對的問題是因爲參考。由於StaticResource資源的引用不會更改,因此不會觸發更新。我所做的是我用MyViewModel封裝了MyModel,並在代碼隱藏中重新創建了MyModel對象。 – exoz 2011-12-19 15:46:29