0
我有一個WPF DataGrid有一些單元格(不是列),需要基於viewmodel中的某些值從只讀切換到可編輯。我能找到這樣做(在一番搜索)的唯一方法是這樣的:使模板通用
<UserControl.Resources>
<DataTemplate x:Key="CellTemplate">
<TextBlock
Text="{Binding MyValue}"
Style="{StaticResource CellTextBlockNumber}" />
</DataTemplate>
<DataTemplate x:Key="ReadonlyCellTemplate">
<TextBlock
Text="{Binding MyValue}"
Style="{StaticResource CellTextBlockNumberReadonly}" />
</DataTemplate>
<DataTemplate x:Key="EditableCellTemplate">
<TextBox
Text="{Binding MyValue}"
Style="{StaticResource CellTextBoxNumber}"
FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" />
</DataTemplate>
</UserControl.Resources>
各種風格的只是不喜歡的東西設置的背景顏色等
然後在DataGrid.Columns部分:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentPresenter x:Name="Presenter" Content="{Binding}" ContentTemplate="{StaticResource CellTemplate}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding EnableCells}" Value="False">
<Setter TargetName="Presenter" Property="ContentTemplate" Value="{StaticResource ReadonlyCellTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentPresenter x:Name="Presenter" Content="{Binding}" ContentTemplate="{StaticResource EditableCellTemplate}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding EnableCells}" Value="False">
<Setter TargetName="Presenter" Property="ContentTemplate" Value="{StaticResource ReadonlyCellTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
所以基本上ContentPresenter的ContentTemplate是基於DataTrigger換出的。
這對單列很好,但我有大約10列需要此功能(在單元級別),而且我真的不想爲每列創建3個模板(如果不需要)。有沒有一種方法可以修改它,以便模板綁定到可以在DataGridColumn級別指定的「通用」值(而不是MyValue)?
這似乎很接近。它適用於CellTemplate,但是當我雙擊編輯時,我得到一個xaml異常:「雙向綁定需要路徑或XPath」 – ConditionRacer
在文本框的文本屬性綁定中添加'Path = .'。 – XAMeLi
謝謝,任何想法爲什麼我不能使用CTRL-C使用此方法複製textblock中的值? – ConditionRacer