C# wpf datagrid:使单元格可编辑和不可编辑
我有一个datagrid,有两列,一个是DataGridComboBox,即“序列号”列,另一个是DataGridTextColumn,即“数量”。DataGridComboBox列中可能有值,也可能没有值。如果combobox中有值,则用户可以从中选择一个值,然后数量列变为不可编辑(只读)并将1设置为默认数量,否则它将成为可编辑单元格,因此用户可以在其上输入任何数量。如何根据combobox中的值选择使数量列可编辑和不可编辑?您可以尝试类似的操作C# wpf datagrid:使单元格可编辑和不可编辑,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个datagrid,有两列,一个是DataGridComboBox,即“序列号”列,另一个是DataGridTextColumn,即“数量”。DataGridComboBox列中可能有值,也可能没有值。如果combobox中有值,则用户可以从中选择一个值,然后数量列变为不可编辑(只读)并将1设置为默认数量,否则它将成为可编辑单元格,因此用户可以在其上输入任何数量。如何根据combobox中的值选择使数量列可编辑和不可编辑?您可以尝试类似的操作 <Grid> <
<Grid>
<DataGrid ItemsSource="{Binding A}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Choose" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding ListOfValues}" SelectedValue="{Binding Selected, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Value">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Selected, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="{Binding ValueAvalible}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid
请发布一些代码,以了解您尝试了什么。
<StackPanel>
<Label Content="{Binding Selected}" Visibility="{Binding ValueAvalible, Converter={StaticResource ResourceKey=booleanToVisiblity}}"/>
<TextBox Text="{Binding Selected, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding ValueAvalible, Converter={StaticResource ResourceKey=invertedBooleanToVisiblity}}"/>
</StackPanel>
class ViewModel
{
public ObservableCollection<Values> A
{
get;
set;
}
public ViewModel()
{
A = new ObservableCollection<Values>();
Values vv = new Values();
vv.ListOfValues = new ObservableCollection<string>();
vv.ListOfValues.Add("1");
vv.ListOfValues.Add("2");
vv.Selected = vv.ListOfValues[0];
vv.ValueAvalible = true;
A.Add(vv);
A.Add(new Values());
}
}
public class Values : NotifiyPropertyChanged
{
public ObservableCollection<string> ListOfValues
{
get;
set;
}
private string selectedValue;
public string Selected
{
get
{
return selectedValue;
}
set
{
selectedValue = value;
Notify("Selected");
}
}
public bool ValueAvalible
{
get;
set;
}
}
public class NotifiyPropertyChanged : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void Notify(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}