C# wpf datagrid:禁用datagridtemplatecolumn

C# wpf datagrid:禁用datagridtemplatecolumn,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我有一个datagrid,其中一列作为模板列,我在其中添加了一个按钮。 我的xaml是: <dg:DataGridTemplateColumn Header="Generate SlNo" Width="100"> <dg:DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Name="btnGenerateSlNO" Width="100

我有一个datagrid,其中一列作为模板列,我在其中添加了一个按钮。 我的xaml是:

 <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>
现在,我想基于属性IsSerialNoProduct启用和禁用按钮。我的问题是,当窗体首次加载时,按钮显示为已启用。只有在单击datagrid中的单元格时,属性才获得值,因为只有我的类构造函数在工作。我想在窗体加载时禁用按钮如何实现这一点

我想根据IsSerialNoProduct属性启用和禁用按钮

不要这样做。
WPF使用了优秀的概念。如果您使用的是数据绑定,您可以使用像或这样的
ICommand
实现,并将bind按钮绑定到该命令:

public class clsPurchaseBillEntryList
{
    // ...
    public clsPurchaseBillEntryList()
    {
         DoSomethingCommand = new RelayCommand(DoSomething, () => IsSerialNoProduct);
    }

    private void DoSomething()
    {
    } 
    public RelayCommand DoSomethingCommand { get; private set; }
}
然后,在XAML中编写:

<Button Name="btnGenerateSlNO" Width="100" Command="{Binding DoSomethingCommand}">Generate SlNo</Button>
生成SlNo
在xaml中:

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


注意:未测试的代码

当我们在datagrid中单击一个单元格时,它会工作,但我的问题是当加载表单时datagrid按钮显示为enable
<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>
public ObservableCollection<clsPurchaseBillEntryList > SerialNumber { get; set; }
public class clsPurchaseBillEntryList 
{
    public bool IsSerialNoProduct { get; set; }
}