powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF + Entity Framework + MVVM: как правильно заполнить ComboBox для DataGrid?
4 сообщений из 4, страница 1 из 1
WPF + Entity Framework + MVVM: как правильно заполнить ComboBox для DataGrid?
    #38651987
salex42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно заполнить DataGridComboBoxColumn в концепции MVVM.
DataContext окна привязан к ViewModel, больше в конструкторе окна ничего нету.
Нижеописанные биндинг для элемента ComboBox почему-то не работает, а для TextCNT работает, хотя источник тот же:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<DataGrid ItemsSource="{Binding Path=Kabonents}"
		  Name="dg1"
		  AutoGenerateColumns="False"
		  RowDetailsVisibilityMode="VisibleWhenSelected" HorizontalAlignment="Left">
	<DataGrid.Columns>
		<DataGridTextColumn Binding="{Binding CODABON}" Header="ЛС"/>
		<DataGridTextColumn x:Name="TextCNT" Header="Количество"
			Binding="{Binding Path=DataContext.Ktypeovens.Count, 
			RelativeSource={RelativeSource FindAncestor, AncestorType=Window, AncestorLevel=1}}" />
		<DataGridComboBoxColumn x:Name="ComboBox" Header="Наименование" 
			ItemsSource="{Binding Path=DataContext.Ktypeovens, 
			RelativeSource={RelativeSource FindAncestor, AncestorType=Window, AncestorLevel=1}}" 
			SelectedValueBinding="{Binding Path=TYPECOOKER}"
			SelectedValuePath="COVEN"
			DisplayMemberPath="NOVEN"/>
	</DataGrid.Columns>
</DataGrid>


Определение ViewModel:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    public class MainWindowViewModel : INotifyPropertyChanged, IDisposable
    {
        private Entities _dataContext;
 
        public ObservableCollection<KABONENT> Kabonents { get; private set; }

        public ObservableCollection<KTYPEOVEN> Ktypeovens { get; set; }

        public MainWindowViewModel()
        {
            _dataContext = new Entities();
            Kabonents = new ObservableCollection<KABONENT>(_dataContext.KABONENTs.Where("it.nif = 5 and it.nuf = 2"));
            Ktypeovens = new ObservableCollection<KTYPEOVEN>(_dataContext.KTYPEOVENs);

        }


Но если в конструкторе окна определить ItemsSource: ComboBox.ItemsSource = _viewModel.Ktypeovens;
То все работает, в чем причина?
Как иначе биндить данные для выпадающих списков по концепции MVVM?
...
Рейтинг: 0 / 0
WPF + Entity Framework + MVVM: как правильно заполнить ComboBox для DataGrid?
    #38654252
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
salex42,

может сделать ресурс DataProvider и биндить выпадающий список к StaticResources?
...
Рейтинг: 0 / 0
WPF + Entity Framework + MVVM: как правильно заполнить ComboBox для DataGrid?
    #38655238
salex42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtessalex42,

может сделать ресурс DataProvider и биндить выпадающий список к StaticResources?

Со StaticResources сработает, верно, но придется создавать еще один класс для DataProvider. Что мне кажется неоправданным. Или вы этим всегда пользуетесь, чтобы потом повторно использовать этот класс в проекте?

Неужели нет способа обратиться к коллекции созданной в ViewModel c помощью биндинга как-то так, теоретически этот способ должен работать, но не срабатывает:
Код: xml
1.
2.
ItemsSource="{Binding Path=DataContext.Ktypeovens, 
			RelativeSource={RelativeSource FindAncestor, AncestorType=Window, AncestorLevel=1}}"
...
Рейтинг: 0 / 0
WPF + Entity Framework + MVVM: как правильно заполнить ComboBox для DataGrid?
    #38655421
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
salex42,
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
                <DataGridComboBoxColumn Header="Header Name" SelectedValueBinding="{Binding SelectedValue}" SelectedValuePath="Key" DisplayMemberPath="Name">
                    <DataGridComboBoxColumn.ElementStyle>
                        <Style TargetType="{x:Type ComboBox}">
                            <Setter Property="ItemsSource" Value="{Binding DataContext.ComboList, ElementName=Window}">
                            </Setter>
                        </Style>
                    </DataGridComboBoxColumn.ElementStyle>
                    <DataGridComboBoxColumn.EditingElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding DataContext.ComboList, ElementName=Window}"/>
                        </Style>
                    </DataGridComboBoxColumn.EditingElementStyle>
                </DataGridComboBoxColumn>
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF + Entity Framework + MVVM: как правильно заполнить ComboBox для DataGrid?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]