私はWPFで再利用可能なテキストブロックユーザーコントロールを作成しようとしています。次のように基本的な考え方は次のとおりです。WPFで自己更新のTextblockユーザーコントロールを作成する
- ユーザが直接テキストブロックの内容を指定していない
- 3つの依存性の
IsToggled
と呼ばれる私のユーザーコントロールのプロパティ、ToggleTrueText
、およびToggleFalseText
があります。 IsToggled
がtrueの場合、コントロールにはToggleTrueText
と表示されます。IsToggled
がfalseの場合はToggleFalseText
を表示します。ユーザーコントロールのコードビハインド:実行時に
IsToggled
変更は、テキストが自動的にToggleTrueText
またはToggleFalseText
のいずれかに変更すると
IsToggled
DPにPropertyChangedCallback
を添加することによって開始 public static readonly DependencyProperty IsToggledProperty =
DependencyProperty.Register("IsToggled", typeof(bool),
typeof(TagToggle), new PropertyMetadata(new
PropertyChangedCallback(OnToggleStateChanged)));
public bool IsToggled
{
get { return (bool)GetValue(IsToggledProperty); }
set { SetValue(IsToggledProperty, value); }
}
//ToggleTrueText and ToggleFalseText are declared similarly to IsToggled
...
ユーザーコントロールのXAML:
<Grid x:Name="LayoutRoot">
<TextBlock x:Name="TheTextBlock" Text="{Binding WhatDoIBindTo}"/>
</Grid>
しかし、私は、実行時に変更をIsToggledたびTheTextBlock
は、そのテキストを更新していることを確認するための最良の方法だろうかわからないんだけど。
あなたは[MCVE]何をやっている私たちを示すを提供するために、気にしませんでしたので、それは、知ることは不可能です。しかし、 'Grid'と' TextBlock'が 'UserControl'のXAMLにあると仮定すると、' TextBlock'のデータコンテキストとして使うことができる 'UserControl'専用のビューモデルが必要です。どちらか、または 'OnToggleStateChanged()'メソッドでプロパティを 'TheTextBlock.Text'として明示的に設定するだけです。質問を改善して、あなたが何をしているのか、何が助けを必要としているのかを明確にしてください。 –
あなたは単にCLRプロパティを作成し、それをテキストブロックテキストプロパティにバインドしないでください。なぜなら、INotifyPropertyChangedの実装を忘れることはありません。 – tabby