2013-10-04 47 views
1

我的網格正確綁定了,我只需禁用或使其只讀取包含在Column2中的所有組合框,即基於代碼後面的任何條件。假設網格渲染後,我們得到10行包含這個comboxbox。我必須禁用所有這10行中的組合框列。禁用/只讀取datagrid中一列中的所有組合框

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

回答

0

您可以在組合框中爲屬性IsEnabled使用Converter。

喜歡的東西

<ComboBox IsEnabled ={Binding Path=XXXX, Converter = {StaticResource MyConverter}} .... /> 

MyConverter會再檢查一下你想要的屬性和檢索或真或假。 事情是這樣的:

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(); 
     } 
    } 
1

你只需要做出一個布爾值屬性的代碼隱藏和綁定到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}" > 
相關問題