1

我的网格已正确绑定,我所要做的就是根据后面代码中的任何条件禁用或使其只读 Column2 中包含的所有组合框。假设在渲染网格后,我们得到 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>
4

2 回答 2

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}" >
于 2013-10-04T10:32:54.243 回答
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();
        }
    }
于 2013-10-04T10:26:58.963 回答