![](/img/trans.png)
[英]enable editing in gridview on button click outside of gridview
[英]How to set a row for editing on a button click in GridView
我有一个GridView,其中包含一些DataGridTextColumn
和一个具有按钮控件的DataGridTemplateColumn
。
<DataGrid Name="dgProductList" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" AutoGenerateColumns="False"
RowBackground="{StaticResource MainBackground}" RowHeight="30"
GridLinesVisibility="None" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Id}" Header="Id" Visibility="Hidden"
FontFamily="verdana" />
<DataGridTextColumn Binding="{Binding Path=Name}" Header="Name"
FontFamily="verdana"/>
<DataGridTextColumn Binding="{Binding Path=Amount}" Header="Amount"
FontFamily="verdana" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Name="btnEdit" Width="117" Style="{StaticResource GlossButtonStyle}"
Click="btnEdit_Click" >Edit</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
默认情况下,不允许用户编辑此gridview。
要求是
当用户单击该行中的“编辑”按钮时,仅需要启用该特定行才能进行编辑,其余行应被锁定,无法编辑。 此外,在单击该按钮时,只有在单击gridview单元格时才可以进行编辑。
然后默认情况下该多余的行不应该存在,并且我在网格外部有一个按钮,单击该新的空白行后,必须将其添加到gridview并在编辑模式下可用。
我使用IsReadOnly="True", AutoGenerateColumns="False"
阻止了Edit并避免出现空白行。 休息的东西我没有得到如何实现。
您可以为每行创建ViewModel并向其添加IsEditing属性。 您可以从以下内容开始:
<DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid> <ToggleButton x:Name="btnEdit" IsChecked="{Binding IsEditing,Mode=TwoWay}">Edit</ToggleButton> <TextBox Visibility="{Binding IsEditing,Converter=yourfavorite}" Text="{Binding Path=., Mode=TwoWay}"/> </Grid> </DataTemplate>
若要仅保留一个活动行,可以为当前行以外的所有RowViewModel重置IsEditing。
}
class RowViewModel
{
GridViewModel parent;
public RowViewModel(GridViewModel parent)
{
this.parent = parent;
}
public string Id { get; set; }
public string Name { get; set; }
public string Amount { get; set; }
public string Value { get; set; }
public bool IsEditing
{
get { return this == parent.ActiveRow; }
set
{
if (value)
parent.ActiveRow = this;
NotifyChange();
}
}
}
class GridViewModel
{
private RowViewModel activeRow;
public ObservableCollection<RowViewModel> Rows { get; private set; }
public GridViewModel()
{
Rows = new ObservableCollection<RowViewModel>();
}
public void AddNewRow()
{
Rows.Add(new RowViewModel(this) { IsEditing = true });
}
public RowViewModel ActiveRow
{
get { return activeRow;}
set
{
activeRow = value;
foreach (var row in Rows.Except(new[] { activeRow }))
{
row.IsEditing = false;
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.