wpf datagrid: disable datagridtemplatecolumn
我有一个只有一列作为模板列的数据网格,并向其中添加了一个按钮。
我的xaml是:
1 2 3 4 5 6 7 | <dg:DataGridTemplateColumn Header="Generate SlNo" Width="100"> <dg:DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Name="btnGenerateSlNO" Width="100" IsEnabled="{Binding IsSerialNoProduct,Mode=TwoWay}" Click="btnGenerateSlNO_Click">Generate SlNo</Button> </DataTemplate> </dg:DataGridTemplateColumn.CellTemplate> </dg:DataGridTemplateColumn> |
我的资料类别:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class clsPurchaseBillEntryList : INotifyPropertyChanged, IDataErrorInfo { private bool _IsSerialNoProduct; public bool IsSerialNoProduct { get { return _IsSerialNoProduct; } set { _IsSerialNoProduct = value; OnPropertyChanged("IsSerialNoProduct"); } } } |
现在我想基于属性IsSerialNoProduct启用和禁用按钮。我的问题是第一次加载表单时按钮显示为启用。仅当我单击数据网格中的单元格时属性才有价值,因为只有我的类构造函数 我想禁用表单加载上的按钮如何完成此操作?
I want to enable and disable the button based on the Property IsSerialNoProduct
不要这样做。
WPF使用了出色的命令概念。 如果使用数据绑定,则可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class clsPurchaseBillEntryList { // ... public clsPurchaseBillEntryList() { DoSomethingCommand = new RelayCommand(DoSomething, () => IsSerialNoProduct); } private void DoSomething() { } public RelayCommand DoSomethingCommand { get; private set; } } |
然后,在XAML中编写:
1 | <Button Name="btnGenerateSlNO" Width="100" Command="{Binding DoSomethingCommand}">Generate SlNo</Button> |
在xaml中:
1 2 3 4 5 6 7 8 9 | <Datagrid Binding={Binding SerialNumber}> <dg:DataGridTemplateColumn Header="Generate SlNo" Width="100"> <dg:DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Name="btnGenerateSlNO" Width="100" IsEnabled="{Binding IsSerialNoProduct,Mode=TwoWay}" Click="btnGenerateSlNO_Click">Generate SlNo</Button> </DataTemplate> </dg:DataGridTemplateColumn.CellTemplate> </dg:DataGridTemplateColumn> </Datagrid> |
在ViewModel中:
1 | public ObservableCollection<clsPurchaseBillEntryList > SerialNumber { get; set; } |
类clsPurchaseBillEntryList:
1 2 3 4 | public class clsPurchaseBillEntryList { public bool IsSerialNoProduct { get; set; } } |
更改IsSerialNoProduct的值将给出预期的响应。
注意:未经测试的代码