2013-11-21 114 views
0

我有一列作为模板列的datagrid,并且我向它添加了一个按钮。 我的XAML是:wpf datagrid:禁用datagridtemplatecolumn

<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"); 
     } 
    } 
} 

现在我想根据物业IsSerialNoProduct.My问题,启用和禁用按钮是当窗体首先加载按钮显示为enabled。只有当我单击数据网格中的单元格时,属性才会获得值,因为只有我的类构造函数有效。我想禁用表单上的按钮如何完成此操作?

回答

1

我想启用和禁用基于属性IsSerialNoProduct

按钮不要这样做。
WPF使用commands的优秀概念。如果您使用数据绑定,您可以使用ICommand实现比如DelegateCommandRelayCommand和绑定按钮,该命令:

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

在视图模型:

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

类clsPurchaseBillEntryList:

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

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

注:未经测试的代码

+0

其工作当我们点击DataGrid中的一个单元格,但我的问题是,当加载的形式DataGrid的按钮显示为启用 – Mussammil

相关问题