2013-10-04 2 views
1

내 그리드가 올바르게 바인딩되고 있습니다. 코드 뒤의 조건에 따라 Column2에 포함 된 모든 콤보 박스를 비활성화하거나 읽기 전용으로 만 설정하면됩니다. 그리드가 렌더링 된 후에 우리는이 comboxbox를 포함하는 10 개의 행을 얻습니다. 이 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 속성에 대해 변환기를 사용할 수 있습니다.

뭔가

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