2015-10-27 3 views
1

У меня есть dataGrid, связанный с коллекцией. Для двух столбцов (A и B) данные равны 1 или 0. Вместо этого я хотел бы отображать Yes или No в comboBoxColumn, и, конечно, если выбрано «yes», то 1 сохраняется и 0 для «нет».Булевы dataGridComboBoxColumn display Да/Нет

Как я могу это сделать?

Посмотреть

<DataGrid x:Name="dataGrid" ItemsSource="{Binding Collection}" AutoGenerateColumns="False" 
           SelectedItem="{Binding Selected, Mode=TwoWay}"> 
        <DataGrid.Columns> 
         <DataGridTextColumn Header="id" Binding="{Binding idproduct, UpdateSourceTrigger=PropertyChanged}" Visibility="Hidden"/> 
         <DataGridTextColumn Header="Ref Supplier" Binding="{Binding refsup, UpdateSourceTrigger=PropertyChanged}"/> 
         <DataGridTextColumn Header="Description" Binding="{Binding description, UpdateSourceTrigger=PropertyChanged}"/> 
         <DataGridComboBoxColumn Header="Unit" 
                 ItemsSource="{Binding Collection, Source={StaticResource unit}}" 
                 DisplayMemberPath="unit1" 
                 SelectedValueBinding="{Binding unit}" 
                 SelectedValuePath="idunit"/> 
         <DataGridTextColumn Header="Price/MOQ" Binding="{Binding priceMOQ, UpdateSourceTrigger=PropertyChanged}"/> 
         <DataGridTextColumn Header="A" Binding="{Binding A, UpdateSourceTrigger=PropertyChanged}"/> 
         <DataGridTextColumn Header="B" Binding="{Binding B, UpdateSourceTrigger=PropertyChanged}"/> 
        </DataGrid.Columns> 
    </DataGrid> 

ViewModel

public class ProductViewModel : ViewModelBase 
    { 


     public Context ctx = new Context(); 

     private ObservableCollection<product> collection; 

     public ObservableCollection<product> Collection 
     { 
      get 
      { 
       if (collection == null) 
       { 
        Get(); 
       } 
       return collection; 
      } 
      set 
      { 
       collection = value; 
       OnPropertyChanged("Collection"); 
      } 
     } 

     #region "Command" 

    } 

Модель

public partial class product 
    { 
     public int idproduct { get; set; } 
     public string refsup { get; set; } 
     public string description { get; set; } 
     public Nullable<int> unit { get; set; } 
     public sbyte larot { get; set; } 
     public sbyte lasand { get; set; } 


     public virtual foodSupplier foodSupplier { get; set; } 
     public virtual unit unit1 { get; set; } 
    } 

Upd ate

Я пробовал два пути, но он не работает.

<Page.Resources> 
     <hlp:YesNoToBooleanConverter x:Key="YesNoToConverter" /> 
</Page.Resources> 

<DataGridTemplateColumn> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <ComboBox ItemsSource="{Binding A}" 
              SelectedValue="{Binding A}"> 
            <ComboBox.ItemTemplate> 
             <DataTemplate> 
              <TextBlock Name="TextBlock" Text="No" /> 
              <DataTemplate.Triggers> 
               <DataTrigger Binding="{Binding}" Value="1"> 
                <Setter TargetName="TextBlock" Property="Text" Value="Yes" /> 
               </DataTrigger> 
              </DataTemplate.Triggers> 
             </DataTemplate> 
            </ComboBox.ItemTemplate> 
           </ComboBox> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
        <DataGridTemplateColumn> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <ComboBox ItemsSource="{Binding B}" 
              SelectedValue="{Binding B}"> 
            <ComboBox.ItemTemplate> 
             <DataTemplate> 
              <TextBlock Text="{Binding Converter={StaticResource YesNoToConverter}}" /> 
             </DataTemplate> 
            </ComboBox.ItemTemplate> 
           </ComboBox> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 



public class YesNoToBooleanConverter : IValueConverter 
    { 

     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      byte inValue = System.Convert.ToByte(value); 
      string outValue = (inValue == 1) ? "Yes" : "No"; 
      return outValue; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 

      switch (value.ToString().Trim().ToLower()) 
      { 
       case "yes": 
        return 1; 
       case "no": 
        return 0; 
       default: 
        return 0; 
      } 
     } 
    } 
+0

Можете ли вы поделиться вашей модели продукта –

ответ

1

Я предлагаю вам следующее точное решение этой проблемы. Пожалуйста, проверьте это. 1. ComboBox код XAML:

<DataGridComboBoxColumn Header="ActivityStatus" SelectedItemBinding="{Binding IsActive, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
      <DataGridComboBoxColumn.ItemsSource> 
       <x:Array Type="system:Boolean"> 
        <system:Boolean>True</system:Boolean> 
        <system:Boolean>False</system:Boolean> 
       </x:Array> 
      </DataGridComboBoxColumn.ItemsSource> 
     </DataGridComboBoxColumn> 

вы ч увидеть все решения по этой стеке ссылки Переполнения запроса: How to Display and select items in a Datagrid ComboBox with WPF C#, using MVVM.

С уважением,

+0

Спасибо вам, это работает отлично. – Cantinou

+0

@Cantinou приветствую вас! – Ilan

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