powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как перейти с BindingList на ObservableCollection при использовании LINQ?
7 сообщений из 7, страница 1 из 1
Как перейти с BindingList на ObservableCollection при использовании LINQ?
    #38015837
Serge73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Как перейти с BindingList на ObservableCollection? Перейти хочу т.к. все примеры используют ObservableCollection. Ну и вроде как общепринятый подход к биндингу в WPF.

2. И стоит ли переделывыть? Что потеряю и что мне это даст?

3. Попутный вопрос: как прописать ресурс в XAML, чтобы было видно данные таблицы в конструкторе.

Сейчас все работает как в коде ниже. В комментариях мои эксперименты, которые в таблицу ничего не выдают совсем.
Использую LINQ

XAML
Код: xml
1.
2.
3.
4.
   
<Grid x:Name="Grid1" Loaded="Grid_Loaded_1">
        <DataGrid x:Name="datagrid1" ItemsSource="{Binding}"/>
</Grid>



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    public partial class MainWindow : Window
    {
        //public ObservableCollection<customers> customerses = new ObservableCollection<customers>();
        //public ObservableCollection<customers> customerses = new ObservableCollection<customers>(from z in   MyAppDataContext.customers orderby z.id select z);
        public BindingList<customers> customerses;
        private DataClasses1DataContext MyAppDataContext = new DataClasses1DataContext();
         

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Grid_Loaded_1(object sender, RoutedEventArgs e)
        {
            // customerses = (from z in MyAppDataContext.customers orderby z.id select z) as ObservableCollection<customers>;
            //customerses = (from z in MyAppDataContext.customers orderby z.id select z).ToList<customers> as ObservableCollection;
            //customerses = (from z in MyAppDataContext.customers orderby z.id select z) as ObservableCollection<customers>;

            customerses = ((from z in MyAppDataContext.customers orderby z.id select z) as IListSource).GetList() as BindingList<customers>;
            
            Grid1.DataContext = customerses;
        }
    }
...
Рейтинг: 0 / 0
Как перейти с BindingList на ObservableCollection при использовании LINQ?
    #38015967
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.Переход необходим, тк wpf и все контролы работают с ObservableCollection, если его нет, то идет преобразование в него, а это дает накладные расходы(которые могут быть весьма значительными, если списки большие) и возможны утечки памяти.
2. linq возвращает простой List и одни только as ничего не дадут для преобразования.
...
Рейтинг: 0 / 0
Как перейти с BindingList на ObservableCollection при использовании LINQ?
    #38015972
Serge73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVa2. linq возвращает простой List и одни только as ничего не дадут для преобразования.

Т.е. нужен новый класс и цикл заполнения?

Как правильно сделать? Хотябы шаги напишите
...
Рейтинг: 0 / 0
Как перейти с BindingList на ObservableCollection при использовании LINQ?
    #38016438
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serge73SeVa2. linq возвращает простой List и одни только as ничего не дадут для преобразования.

Т.е. нужен новый класс и цикл заполнения?

Как правильно сделать? Хотябы шаги напишите

Да, получаешь лист, а потом заполняешь коллекцию.
Получить данные - это только начало. Нужна поддержка: INotifyPropertyChanged, валидация, разграничение доступа и тд.
Для начала рекомендую ознакомится с CSLA(www.lhotka.net). Этот фреймворк в исходниках и там можешь посмотреть на его подходы и решения. Кроме этого есть букварь с описанием. Его стоит посмотреть в любом случае, там найдешь ответы на большинство вопросов.
...
Рейтинг: 0 / 0
Как перейти с BindingList на ObservableCollection при использовании LINQ?
    #38017444
Serge73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot SeVa]Serge73пропущено...

Кроме этого есть букварь с описанием. Его стоит посмотреть в любом случае, там найдешь ответы на большинство вопросов.

К сожалению только вчера обнаружил целый раздел с описание привязки. Букварь с годами стал какой-то неудобный, хрен что найдешь, особенно примеры. Еще электронный перевод от MS просто выводит порой.
...
Рейтинг: 0 / 0
Как перейти с BindingList на ObservableCollection при использовании LINQ?
    #38089343
Serge73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все оказалось просто до безобразия. Еще проще чем через BindingList/
Ключевой момент оказался в правильно выбранной перегрузке:

customersObserv = new ObservableCollection<customers>(from z in DC.customers select z);

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
namespace WpfApplication21
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public DataClasses1DataContext DC = new DataClasses1DataContext();
        private ObservableCollection<customers> customersObserv;
       

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded_1(object sender, RoutedEventArgs e)
        {

            customersObserv = new ObservableCollection<customers>(from z in DC.customers select z);

            System.Windows.Data.CollectionViewSource customersViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("customersViewSource")));
            // Загрузите данные, установив свойство CollectionViewSource.Source:
            // customersViewSource.Source = [универсальный источник данных]
            customersViewSource.Source = customersObserv;
        }
    }
}



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication21" mc:Ignorable="d" x:Class="WpfApplication21.MainWindow"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded_1">
    <Window.Resources>
        <CollectionViewSource x:Key="customersViewSource" d:DesignSource="{d:DesignInstance {x:Type local:customers}, CreateList=True}"/>
    </Window.Resources>
    <Grid DataContext="{StaticResource customersViewSource}">
        <DataGrid x:Name="customersDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" RowDetailsVisibilityMode="VisibleWhenSelected">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="actual_addressColumn" Binding="{Binding actual_address}" Header="actual address" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="commentsColumn" Binding="{Binding comments}" Header="comments" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="fullNameColumn" Binding="{Binding FullName}" Header="Full Name" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="idColumn" Binding="{Binding id}" Header="id" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="iNNColumn" Binding="{Binding INN}" Header="INN" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="nameColumn" Binding="{Binding Name}" Header="Name" Width="SizeToHeader"/>
                <DataGridTextColumn x:Name="registered_addressColumn" Binding="{Binding registered_address}" Header="registered address" Width="SizeToHeader"/>
            </DataGrid.Columns>
        </DataGrid>

    </Grid>
</Window>
...
Рейтинг: 0 / 0
Как перейти с BindingList на ObservableCollection при использовании LINQ?
    #38450499
Bynky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serge73,
Как вы добавляете данные из ObservableCollection в базу данных? Скажите, пожалуйста)
Ну, если, конечно, вы добавляете их.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как перейти с BindingList на ObservableCollection при использовании LINQ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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