c# enum Как связать combobox внутри wpf datagrid?




wpf combobox binding list (4)

Просто угадайте, так как я не на моей станции dev, но попробуйте использовать ElementName для ссылки на окно по имени вместо относительного источника ...

Что-то вроде:

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

и добавьте Name = "MyWindowName" в определение окна.

Как связать (Itemssource и выбранный элемент) выпадающего списка внутри wpf datagrid? Я использую шаблон MVVM. я пытался

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

а также

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

Свойства, используемые для привязки данных

#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

Ссылка: http://code.msdn.microsoft.com/windowsdesktop/Best-ComboBox-Tutorial-5cc27f82


Answer #1

Я пробовал так много вариантов, но самый простой вариант, который я нашел, - это генерировать событие загрузки этого поля со списком и привязать его к списку или таблице данных.

например, в 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>

Код .cs

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

    }

Answer #2

Просто используйте эту сторону os .cs

DataContext = CarParts;


Answer #3

Попробуйте сделать свои списки наблюдаемыми коллекциями. Вы должны убедиться, что ваши свойства сообщают вашему пользовательскому интерфейсу, когда новые объекты добавляются в вашу коллекцию, и это то, что ObservableCollection делает для вас.

Также убедитесь, что ваш CarPart и MyCar реализует INotifyPropertyChanged .

Независимо от того, зависит ли это от вашей проблемы, когда именно настроены ваши свойства.





combobox