繁体   English   中英

wpf datagrid:禁用datagridtemplatecolumn

[英]wpf datagrid: disable datagridtemplatecolumn

我有一个数据网格,其中一列作为模板列,并且向它添加了一个按钮。 我的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");
        }
    }
}

现在我想基于属性IsSerialNoProduct启用和禁用按钮。我的问题是第一次加载表单时按钮显示为启用。仅当我单击数据网格中的单元格时属性才有价值,因为只有我的类构造函数是我想禁用表单加载上的按钮如何完成此操作?

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

不要这样做。
WPF使用出色的命令概念。 如果使用数据绑定,则可以使用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>

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

类clsPurchaseBillEntryList:

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

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

注意:未经测试的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM