我擁有的:
我有DataGridTemplateColumn一個ComboBox:
<DataTemplate x:Key="ValuesCellTemplate">
<TextBlock Text="{Binding Path=SelectedValue, Mode=OneWay}" />
</DataTemplate>
<DataTemplate x:Key="ValuesCellEditingTemplate">
<ComboBox
Name="ValuesComboBox"
DisplayMemberPath="DisplayText"
ItemsSource="{Binding Path=Value, Mode=OneWay}"
SelectedValue="{Binding Path=SelectedValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="DisplayText" />
</DataTemplate>
我正在自動生成列,因此AutoGeneratingColumn事件如下所示:
if (e.PropertyName == "First")
{
var templateColumn = new DataGridTemplateColumn
{
Header = e.PropertyName,
CellTemplate = (sender as FrameworkElement).FindResource("ValuesCellTemplate") as DataTemplate,
CellEditingTemplate = (sender as FrameworkElement).FindResource("ValuesCellEditingTemplate") as DataTemplate
};
e.Column = templateColumn;
}
當Values(這是一個ObservableCollection)是null我希望單元格為只讀時,因此它將無法進入 CellEditing 模式。
此列的內容有 2 個選項:
- 一個簡單的整數 -
SelectedValue ObservableCollection<int>——Values
當Values里面有值時,當雙擊單元格(或TextBlock)(也就是說 - 進入 CellEditing 模式)時,ComboBox應該出現一個,否則不會出現。基本上就是這樣。
我嘗試過的:
我嘗試這樣做:
<DataTemplate x:Key="ValuesCellTemplate">
<TextBlock Text="{Binding Path=SelectedValue, Mode=OneWay}" />
</DataTemplate>
<DataTemplate x:Key="ValuesCellEditingTemplate">
<ComboBox
Name="ValuesComboBox"
DisplayMemberPath="DisplayText"
IsEnabled="{Binding HasItems, RelativeSource={RelativeSource Self}}"
ItemsSource="{Binding Path=Value, Mode=OneWay}"
SelectedValue="{Binding Path=SelectedValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="DisplayText" />
</DataTemplate>
但是當我雙擊它時,它TextBox變成了一個空的只讀ComboBox(進入 CellEditing 模式)。我只想讓它不采取任何行動(只讀)(僅當Values是null)。
這樣做的正確方法是什么?
For the record, I am using MVVM pattern.
uj5u.com熱心網友回復:
防止DataGrid雙擊時進入編輯模式的一種簡單方法TextBox是處理PreviewMouseDown單元格的事件:
private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
DataGridCell cell = (DataGridCell)sender;
e.Handled = cell.DataContext is YourClass dataObject && !dataObject.Value.Any();
}
...
var templateColumn = new DataGridTemplateColumn
{
Header = e.PropertyName,
CellTemplate = (sender as FrameworkElement).FindResource("ValuesCellTemplate") as DataTemplate,
CellEditingTemplate = (sender as FrameworkElement).FindResource("ValuesCellEditingTemplate") as DataTemplate,
CellStyle = (sender as FrameworkElement).FindResource("ReadOnlyCellStyle") as Style,
};
XAML:
<Style x:Key="ReadOnlyCellStyle" TargetType="DataGridCell">
<EventSetter Event="PreviewMouseDown" Handler="OnPreviewMouseDown" />
</Style>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/346051.html
