Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 144
1

MVVA байндинг

13.12.2017, 19:58. Показов 704. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, форумчане! Реализовываю приложение, но не получается реализовать байндинг.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    public class ShowPeopleViewModel
    {
        public ShowPeopleViewModel()
        {
            ShowPeople();
        }
        public async Task ShowPeople()
        {
          // Получение списка людей происходит успешно
        }
        public List<PersonModel> People { get; set; }
 
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public partial class NameSearchWindow : Window
    {
        public NameSearchWindow()
        {
            InitializeComponent();
        }
 
 
        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            ShowPeopleWindow Window = new ShowPeopleWindow();
            Window.Show();
            this.Close();
        }
    }

C#
1
2
3
4
5
6
7
8
    public partial class ShowPeopleWindow : Window
    {
        public ShowPeopleWindow()
        {
            InitializeComponent();
            DataContext = new ShowPeopleViewModel();
        }
    }
C#
1
2
3
4
    public class PersonModel
    {
        public string Name { get; set; }
    }
XML
1
2
3
4
        <ListBox HorizontalAlignment="Center" Height="190" Grid.Row="1" VerticalAlignment="Center" Width="244" ItemsSource="{Binding People}">
            <TextBlock Text="{Binding Path=Name}"></TextBlock>
            
        </ListBox>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2017, 19:58
Ответы с готовыми решениями:

Не работает (видимо) байндинг при добавлении в коллекцию из другого потока (MVVM)
В общем, написал программу (WPF). Когда весь код был в MainWindow.xaml.cs, то такой код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
45 / 45 / 32
Регистрация: 01.10.2012
Сообщений: 185
13.12.2017, 22:07 2
1. MVVM*
2. Реализовать INotifyPropertyChanged для модели

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
29
30
 public class PersonModel : INotifyPropertyChanged
    {
        private string name;
 
        public string Name {
         get
            {
                return name;
            }
 
            set
            {
                if (value != name)
                {
                    name = value;
                    NotifyPropertyChanged();
                }
            }
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
 
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
3. Земенить List<T> на ObservableCollection<T>

C#
1
public  ObservableCollection<PersonModel> People { get; set; }
0
102 / 24 / 12
Регистрация: 12.12.2013
Сообщений: 209
Записей в блоге: 1
14.12.2017, 07:39 3
Цитата Сообщение от griboyedov Посмотреть сообщение
Реализовываю приложение, но не получается реализовать байндинг.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    public partial class NameSearchWindow : Window
    {
        public NameSearchWindow()
        {
            InitializeComponent();
        }
        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            ShowPeopleWindow Window = new ShowPeopleWindow();
            Window.Show();
            this.Close();
        }
    }
Уходите уже от code-behind, если используете WPF.
0
26 / 25 / 3
Регистрация: 22.01.2013
Сообщений: 273
14.12.2017, 09:28 4
не байдинг а биндинг...
0
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 144
14.12.2017, 20:20  [ТС] 5
Что-то не получилось. Поменял код на такой:

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
29
30
 public class PersonModel : INotifyPropertyChanged
    {
        private string name;
 
        public string Name {
         get
            {
                return name;
            }
 
            set
            {
                if (value != name)
                {
                    name = value;
                    NotifyPropertyChanged();
                }
            }
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
 
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
Всё равно ListBox пустой, хотя во ViewModel, получаю список людей.
0
45 / 45 / 32
Регистрация: 01.10.2012
Сообщений: 185
14.12.2017, 22:33 6
ViewModel в студию

Плюс в View добавить

C#
1
2
3
4
5
6
7
8
9
<ListBox HorizontalAlignment="Center" Height="190" Grid.Row="1" VerticalAlignment="Center" Width="244" ItemsSource="{Binding People}">
<ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                     <TextBlock Text="{Binding Path=Name}"></TextBlock>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
0
0 / 0 / 0
Регистрация: 28.12.2013
Сообщений: 144
15.12.2017, 09:56  [ТС] 7
Gekr, посмотрите, пожалуйста.

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
    public class ShowPeopleViewModel
    {
 
        public ShowPeopleViewModel()
        {
            ShowPeople();
        }        
 
        public  async Task ShowPeople()
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:50825");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
 
                HttpResponseMessage response;
 
                response = await client.GetAsync("api/People");
                if (response.IsSuccessStatusCode)
                {
                    People = await response.Content.ReadAsAsync<ObservableCollection<PersonModel>>();
                }
            };
        }
        public ObservableCollection<PersonModel> People { get; set; }
 
    }
XML
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
29
30
<Window x:Class="DesktopClient.ShowPeopleWindow"
        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:DesktopClient"
        mc:Ignorable="d"
Title="ShowPeople" Height="300" Width="300">
    <Grid >
        <Grid.RowDefinitions>
            <RowDefinition Height="27*"></RowDefinition>
            <RowDefinition Height="246*"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
 
        </Grid.ColumnDefinitions>
        <ListBox HorizontalAlignment="Center" Height="190" Grid.Row="1" VerticalAlignment="Center" Width="244" ItemsSource="{Binding People}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Name}"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
 
 
    </Grid>
 
</Window>
0
45 / 45 / 32
Регистрация: 01.10.2012
Сообщений: 185
15.12.2017, 11:58 8
Попробуйте инициализировать коллекцию. Если не помогло, значит что-то не так с Response.Result
Миниатюры
MVVA байндинг  
0
15.12.2017, 11:58
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru