我試圖在WPF中創建一個可重用的textblock用戶控件。其基本思路是:在WPF中創建一個自我更新的Textblock用戶控件
- 用戶不直接指定文本塊的內容
- 有在我的用戶控三種扶養性質稱爲
IsToggled
,ToggleTrueText
和ToggleFalseText
。 - 如果
IsToggled
爲真,則控件將顯示ToggleTrueText
;或者如果IsToggled
爲假,則顯示ToggleFalseText
。 - 當運行時
IsToggled
變化,文本自動切換到任何ToggleTrueText
或ToggleFalseText
我開始加入了PropertyChangedCallback
到IsToggled
DP:用戶控件的
代碼隱藏:
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
...
private static void OnToggleStateChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
...
}
XAML中用戶控件:
<Grid x:Name="LayoutRoot">
<TextBlock x:Name="TheTextBlock" Text="{Binding WhatDoIBindTo}"/>
</Grid>
但是,我不知道什麼是最好的方式,以確保TheTextBlock
更新每當IsToggled運行時改變它的文本。
這是不可能知道的,因爲你沒有刻意去提供[MCVE]我們展示你在做什麼。但假設'Grid'和它的'TextBlock'在'UserControl' XAML中,那麼你應該有一個'UserControl'專用的視圖模型,它可以用作'TextBlock'的數據上下文。或者,或者直接在'OnToggleStateChanged()'方法中將該屬性設置爲'TheTextBlock.Text'。請改善問題,清楚你正在做什麼以及需要什麼幫助。 –
爲什麼不只是創建一個CLR屬性並將其綁定到您的textblock文本屬性,並且不要忘記實現INotifyPropertyChanged。 – tabby