wpf datagrid:禁用datagridtemplatecolumn

时间:2013-11-21 06:36:02

标签: c# wpf xaml 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>

我的数据类:

 public class clsPurchaseBillEntryList : INotifyPropertyChanged, IDataErrorInfo
{

    private bool _IsSerialNoProduct;
     public bool IsSerialNoProduct
    {
        get { return _IsSerialNoProduct; }
        set
        {
            _IsSerialNoProduct = value;
            OnPropertyChanged("IsSerialNoProduct");
        }
    }
}

现在我想基于Property IsSerialNoProduct启用和禁用该按钮。我的问题是当表单首次加载时按钮显示为启用。该属性仅在我单击datagrid中的单元格时才获得值,因为只有我的类构造函数是否工作。我想在表单加载时禁用该按钮如何完成此操作?

2 个答案:

答案 0 :(得分:1)

  

我想根据Property IsSerialNoProduct

启用和禁用按钮

不要这样做。
WPF使用了commands的优秀概念。如果您正在使用数据绑定,则可以使用DelegateCommandRelayCommand之类的ICommand实现,并将按钮绑定到该命令:

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>

答案 1 :(得分:0)

在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>

在ViewModel中:

public ObservableCollection<clsPurchaseBillEntryList > SerialNumber { get; set; }

Class clsPurchaseBillEntryList:

public class clsPurchaseBillEntryList 
{
    public bool IsSerialNoProduct { get; set; }
}

更改IsSerialNoProduct的值将给出预期的响应。

注意:未经测试的代码