當單擊 TextBlock 所在的 ToggleButton 時,我試圖更改 TextBlock 的文本。TextBlock 與影像一起位于 StackPanel 內,而 StackPanel 位于 ToggleButton 的 DataTemplate 內。
我正在嘗試使用 ViewModel 中名為 EditState 的屬性來完成此操作。單擊 ToggleButton 時 EditState 屬性成功更改為“True”,因此問題不在 ViewModel 中。
沒有顯示錯誤,TextBlock 的文本不會改變。這是我目前擁有的 XAML 代碼:
<ToggleButton x:Name="btnEdit" Grid.ColumnSpan="1" Command="{Binding EditCommand}"
IsEnabled="{Binding CanEdit}" MinWidth="168">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate DataType="{x:Type ToggleButton}">
<StackPanel Orientation="Horizontal">
<Image Source="/Resources/IconEdit.jpg" Height="20">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.2" />
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<TextBlock x:Name="tbkEdit" Text="Enable Editing" Margin="5" />
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding EditState}" Value="True">
<Setter TargetName="tbkEdit" Property="Text"
Value="Cancel Editing"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ToggleButton.Style>
</ToggleButton>
我正在尋找與 MVVM 一致的解決方案。這是我第一次使用 WPF 并使用 MVVM 開發專案。如果有人能糾正我的錯誤或指出我正確的方向,我將不勝感激。
uj5u.com熱心網友回復:
當您為控制元件設定樣式時,“與 MVVM 一致的解決方案”是一種誤解。這只是一個視圖元素,不應依賴于任何視圖模型。MVVM 在這里不相關。
ContentTemplate 中的 TextBlock 應顯示 ToggleButton 的Content屬性Text="{Binding}",并且 Content 屬性應由 Style Setter 設定并由 ToggleButtonIsChecked屬性上的 Style Trigger 更改。
另請注意,DataType="{x:Type ToggleButton}"在 ContentTemplate 上是沒有意義且不正確的。DataType 用于自動使用 DataTemplate 資源,這在此處不會發生。并且它應該匹配 Content 的型別,而不是控制元件的型別。
<ToggleButton ...>
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image ...>
...
</Image>
<TextBlock Text="{Binding}" Margin="5"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="Content" Value="Enable Editing"/>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="Cancel Editing"/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/481278.html
