关于c#:wpf datagrid:禁用datagridtemplatecolumn

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使用了出色的命令概念。 如果使用数据绑定,则可以使用ICommand实现(例如DelegateCommandRelayCommand),并将按钮绑定到该命令:

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的值将给出预期的响应。

注意:未经测试的代码