2016-03-22 21 views
0

のプロパティをTextBlockに設定しようとしていますが、両方ともCodeBehind(xaml.cs)とViewModelからバインドしています。TextBlock.Textの更新ViewModelとCodeBehind WPF

デフォルトでは、値は正常に動作するViewModelから読み込まれます。

XAML:ボタンのクリックイベントで

は、以下のことを試してみました

<TextBlock Name="test"> 
    <TextBlock.Text> 
     <MultiBinding StringFormat=" ({0}, {1} of {2})"> 
      <Binding Path="SeriesId" /> 
      <Binding Path="SeriesName" /> 
      <Binding Path="SeriesCalc" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

XAML.cs、

test.DataContext = "Not Available"; 

それとも

test.Text = "Not Available"; 

のViewModel:私はTextBlockに値を代入しようとしているCommand別のボタンで

SeriesId= GetIds(); 
    SeriesName= GetNamesWithDE(); 
    SeriesCalc= CalculateValue(); 

しかし、「Not Availableが」背後にあるコードから設定されると、それはViewModelから上書きすることができませんでした。

どこが間違っていますか?

+1

あなたは間違っていません。 datacontextをviewmodelから離して設定した場合、Textblockをもう更新することはできません... btwなぜ地獄でこれをしたいのですか? – blindmeis

+1

XAMLでは、あなたの 'Text'プロパティへのバインディングを設定しています。後ろのコードでは 'Text'プロパティをリセットしています。したがって、あなたの束縛はうまくいく。 – zahir

+0

@ zahir:ありがとう。 – iamCR

答えて

2

test.Text = "Not Available";と記述すると、単純な文字列で上書きすることでデータバインディングを壊しました。あなたが完了したい場合は、データバインディングを使用しての背後にあるコードからTextBlock値を変更すると、あなたはその後、バインディング更新する必要があります

test.Text = "Not available"; 
test.GetBindingExpression(TextBlock.TextProperty).UpdateSource(); 

またはその値のソースを変更せずに依存関係プロパティの値を設定しますSetCurrentValue方法で

test.SetCurrentValue(TextBlock.TextProperty, "Not available"); 
+0

最初の結果は 'Object reference'エラー(' test.GetBindingExpression(TextBlock.TextProperty) 'で' null'が発生します)、2番目の結果ではボタンの2回目のクリックでテキストが変化し、最初のクリックは、2回のクリック後に正常に動作することを意味します。 – iamCR

+0

MultiBindingなので、このようなものでなければなりません。 'BindingOperations.GetMultiBinding(test、TextBlock.TextProperty);'。このコードを使って修正して更新できますか? – iamCR

関連する問題