【发布时间】:2013-11-24 01:54:45
【问题描述】:
我有一个数据网格,其中有一列即 Qty ,当用户按下表单上的“编辑”按钮时,用户只能输入数量(可编辑),否则它就像只读字段一样。
如何做到这一点?
【问题讨论】:
我有一个数据网格,其中有一列即 Qty ,当用户按下表单上的“编辑”按钮时,用户只能输入数量(可编辑),否则它就像只读字段一样。
如何做到这一点?
【问题讨论】:
如果您使用CheckBox 或ToggleButton,那么您只需使用Binding 就可以做到这一点,而无需任何代码:
<ToggleButton Name="EditButton" Content="Edit" />
...
<DataGrid ItemsSource="{Binding YourCollection}">
<DataGrid.Columns>
...
<DataGridTextColumn Header="Quantity" IsReadOnly="{Binding IsChecked,
ElementName=EditButton}" Binding="{Binding Quantity}" />
...
</DataGrid.Columns>
</DataGrid>
更新>>>
如果您使用类在DataGrid 中显示您的项目(这总是一个好主意),那么有一个简单的解决方案。您可以在IsReadOnly 属性中添加一个额外的bool 属性到Bind,并且您可以在每次更改Quantity 属性时更新bool 值:
public string SerialNo
{
get { return serialNo; }
set
{
serialNo = value;
NotifyPropertyChanged("SerialNo");
// Update new property
IsQtyReadOnly = serialNo == "The read only value";
}
}
public bool IsQtyReadOnly // <<< New property
{
get { return isQtyReadOnly; }
set { isQtyReadOnly= value; NotifyPropertyChanged("IsQtyReadOnly"); }
}
还有 XAML:
<ToggleButton Name="EditButton" Content="Edit" />
...
<DataGrid ItemsSource="{Binding YourCollection}">
<DataGrid.Columns>
...
<DataGridTextColumn Header="Qty" IsReadOnly="{Binding IsQtyReadOnly}"
Binding="{Binding Qty}" />
...
</DataGrid.Columns>
</DataGrid>
如果您这样做,IsQtyReadOnly 属性将在 SerialNo 属性值更改时自动更新。
【讨论】:
您需要该按钮的事件处理程序:
private void OnClick(object sender, RoutedEventArgs e)
{
QtyColumn.IsReadOnly = !QtyColumn.IsReadOnly;
}
【讨论】: