禁用/只读取datagrid中一列中的所有组合框

时间:2013-10-04 10:08:15

标签: wpf binding datagrid datagridcomboboxcolumn

我的网格正确绑定所有我要做的就是禁用或基于后面的代码中的任何条件使其只读取Column2中包含的所有组合框。假设在渲染网格后,我们得到包含此comboxbox的10行。我必须在所有这10行中禁用组合框列。

<DataGridTextColumn Binding="{Binding Value1}" Header="Column1" IsReadOnly="True"/>
    <DataGridTemplateColumn Header="Column2">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ComboBox SelectedItem="{Binding MySelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding MyComboItemSource}" >                                       
                </ComboBox>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGridTextColumn>

2 个答案:

答案 0 :(得分:1)

你只需要在Code-Behind中创建一个bool属性并绑定到xaml中组合框的isEnabled属性。

代码隐藏

private bool _Disable;

        public bool Disable
        {
            get { return _Disable; }
            set
            {
                _Disable= value;
                OnPropertyChanged("Disable");
            }
        }

的Xaml

<ComboBox IsEnabled="{Binding Disable,Mode=TwoWay,RelativeSource={RelativeSource AncestorType=Window}}" SelectedItem="{Binding MySelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding MyComboItemSource}" >

答案 1 :(得分:0)

您可以在组合框中使用转换器作为属性IsEnabled。

这样的东西
<ComboBox IsEnabled ={Binding Path=XXXX, Converter = {StaticResource MyConverter}} .... />

MyConverter将填充您想要的属性并检索false或true。 像这样:

 public class MyConverter: IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if(value!=null)
{
     if((int) value==1)
return true;
else return false;
}

        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }