2013-11-23 5 views
0

У меня есть datagrid с двумя столбцами, один из которых является DataGridComboBox, а столбец «Serial No», а другой - DataGridTextColumn, а именно «Qty». Столбец DataGridComboBox может иметь или не иметь значений в нем. Если в поле со списком есть значения, тогда пользователь может выбрать одно значение из него, тогда столбец qty станет uneditable (только для чтения) и установит 1 как значение по умолчанию qty, иначе он станет редактируемой ячейкой. Следовательно, пользователь может ввести любое количество на нем. Как я сделал Столбец Qty редактируется и не редактируется на основе выбора значения из combobox?wpf datagrid: Сделать ячейку Редактируемым и нередактируемым

+0

Пожалуйста размещает код , Чтобы знать, что вы пробовали. –

ответ

0

вы можете попробовать некоторые вещи, как этот

<Grid> 
    <DataGrid ItemsSource="{Binding A}" AutoGenerateColumns="False" > 
     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="Choose" > 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox ItemsSource="{Binding ListOfValues}" SelectedValue="{Binding Selected, UpdateSourceTrigger=PropertyChanged}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Value"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 

         <TextBox Text="{Binding Selected, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="{Binding ValueAvalible}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid 

В сотовом Demplate как сейчас я поставил только TextBox и связала ValueAvalible к ReadOnly Property. Вы также можете иметь как метку, так и TextBox, и вы можете привязать ValueAvalible к видимости ярлыка и TextBox и. Вы можете скрыть текст, чтобы показать метку, если значение доступно. Если значение не существует в COMBOBOX вы можете скрыть метку и показать TextBox, который даст лучший пользовательский опыт, как ниже

<StackPanel> 
    <Label Content="{Binding Selected}" Visibility="{Binding ValueAvalible, Converter={StaticResource ResourceKey=booleanToVisiblity}}"/> 
     <TextBox Text="{Binding Selected, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding ValueAvalible, Converter={StaticResource ResourceKey=invertedBooleanToVisiblity}}"/> 
</StackPanel> 

В вашей ViewModel

class ViewModel 
{ 
    public ObservableCollection<Values> A 
    { 
     get; 
     set; 
    } 

    public ViewModel() 
    { 
     A = new ObservableCollection<Values>(); 
     Values vv = new Values(); 
     vv.ListOfValues = new ObservableCollection<string>(); 
     vv.ListOfValues.Add("1"); 
     vv.ListOfValues.Add("2"); 
     vv.Selected = vv.ListOfValues[0]; 
     vv.ValueAvalible = true; 
     A.Add(vv); 
     A.Add(new Values()); 
    } 
} 

public class Values : NotifiyPropertyChanged 
{ 
    public ObservableCollection<string> ListOfValues 
    { 
     get; 
     set; 
    } 
    private string selectedValue; 
    public string Selected 
    { 
     get 
     { 
      return selectedValue; 
     } 
     set 
     { 
      selectedValue = value; 
      Notify("Selected"); 
     } 
    } 

    public bool ValueAvalible 
    { 
     get; 
     set; 
    } 

} 

public class NotifiyPropertyChanged : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void Notify(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

}

Смежные вопросы