Cómo enlazar (Itemssource y elemento seleccionado) de un combobox en el interior de wpf datagrid? Yo estoy usando el patrón MVVM.
He intentado

<DataGridTemplateColumn Header="Example 9">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding PartIds, RelativeSource={RelativeSource AncestorType=Window}}" SelectedItem="{Binding PartId, UpdateSourceTrigger=PropertyChanged}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

y

   <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding MyCars}" HorizontalAlignment="Left">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Model" Binding="{Binding Model}"/>
                    <DataGridTextColumn Header="Registration" Binding="{Binding Registration}"/>

                    <DataGridTemplateColumn Header="Example 12">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding CarParts, RelativeSource={RelativeSource AncestorType=Window}}" DisplayMemberPath="PartName" SelectedValuePath="PartID"  SelectedValue="{Binding PartId, UpdateSourceTrigger=PropertyChanged}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

                    <DataGridTextColumn Header="Selected" Binding="{Binding PartId}"/>

                </DataGrid.Columns>
            </DataGrid>

Propiedades que se utilizan para el enlace de datos

#region DataGrid List<String> Example

        public ObservableCollection<MyCar> MyCars { get; set; }
        public List<string> PartIds { get; set; } 

        #endregion

        #region DataGrid List<Class> Example

        public List<CarPart> CarParts { get; set; }

        #endregion

De referencia:
http://code.msdn.microsoft.com/windowsdesktop/Best-ComboBox-Tutorial-5cc27f82

  • ¿Cómo está estableciendo el DataContext de la Ventana de control?
  • En el archivo de código.
  • public partial class ventana principal : la Ventana { MainWindowViewModel vm = new MainWindowViewModel(); public MainWindow() { this.DataContext = vm; InitializeComponent(); } }
  • c-sharpcorner.com/uploadfile/dpatra/combobox-in-datagrid-in-wpf esto puede ayudar a
InformationsquelleAutor user2330678 | 2013-12-19

4 Comentarios

  1. 6

    He intentado muchas opciones, pero la opción más sencilla que he encontrado es para generar carga en caso de que el cuadro combinado & Enlazar con la lista o tabla de datos.

    por ejemplo,
    En Xaml

     <DataGridTemplateColumn.CellEditingTemplate>
           <DataTemplate>
                      <ComboBox x:Name="cmbPayee" Loaded="cmbPayee_Loaded" Text="{Binding PayeeName, NotifyOnSourceUpdated=True,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedValue ="{Binding PayeeID, NotifyOnSourceUpdated=True,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  DisplayMemberPath = "Payee1" SelectedValuePath="PayeeID"/>
          </DataTemplate>

    En .cs código

    private void cmbPayee_Loaded(object sender, RoutedEventArgs e)
        {
            ComboBox cmb = (ComboBox)sender;
                var res = from k in db.Payees
                          select k;
                cmb.ItemsSource = res.ToList();
                cmb.DisplayMemberPath = "Payee1";
                cmb.SelectedValuePath = "PayeeID";
    
        }
  2. 1

    Trate de hacer sus Listas observable colecciones. Usted necesita para asegurarse de que sus propiedades están diciendo a su interfaz de usuario cuando los nuevos objetos de añadir a su colección, y eso es lo que un ObservableCollection hace por usted.

    También asegúrese de que su CarPart y MyCar clase implemente INotifyPropertyChanged.

    Si esto es o no es su problema depende de cuando exactamente sus propiedades.

  3. 1

    Sólo una suposición ya que no estoy en mi dev estación, pero trate de usar ElementName para hacer referencia a la ventana por su nombre en lugar de relativa fuente…

    Algo como:

    ItemsSource="{Binding CarParts,ElementName=MyWindowName}"

    y el complemento de un Nombre=»MyWindowName» a la ventana de definición.

Dejar respuesta

Please enter your comment!
Please enter your name here