powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Binding: Что здесь не так?
12 сообщений из 12, страница 1 из 1
Binding: Что здесь не так?
    #38790664
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь пустить пример из книжки, но не работает, то есть не показывает значения введенные в поля в рид-онли полях.
В отладчике вообще не заходит в get/set.

Что я упустил?

1. окно

Код: 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.
<Window x:Class="WpfApplication1.WindowProperty"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WindowProperty" Height="300" Width="300">
    <StackPanel>
        <TextBlock Text='{Binding Path=Name.First}' />
        <TextBlock Text='{Binding Path=Name.Last}' />
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Label Grid.Row='0' Grid.Column='0'>First</Label>
            <TextBox Grid.Row='0' Grid.Column='1'
Text='{Binding Path=Name.First}' />
            <Label Grid.Row='1' Grid.Column='0'>Last</Label>
            <TextBox Grid.Row='1' Grid.Column='1'
Text='{Binding Path=Name.Last,UpdateSourceTrigger=PropertyChanged}'
/>
        </Grid>
    </StackPanel>
</Window>



2. код
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for WindowProperty.xaml
    /// </summary>
    public partial class WindowProperty : Window
    {
        Name Name;

        public WindowProperty()
        {
            InitializeComponent();
            Name = new Name();
        }
    }

    public class Name : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private string _first;
        private string _last;

        public string First
        {
            get { return _first; }
            set
            {
                _first = value;
                NotifyChanged("First");

            }
        }
        public string Last
        {
            get { return _last; }
            set
            {
                _last = value;
                NotifyChanged("Last");
            }
        }

        void NotifyChanged(string property) 
        {
            if (PropertyChanged != null) 
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
    }
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38790760
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Датаконтекст окну нужно задать.
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38790793
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныДатаконтекст окну нужно задать.

да, спасибо, получилось!

Но возник вопрос, если будет несколько датаконтекстов, как с ними работаь в одном окне?

Код: 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.
31.
32.
33.
<Window x:Class="WpfApplication1.WindowProperty"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication1="clr-namespace:WpfApplication1"
        Title="WindowProperty" Height="300" Width="300">
    <Window.Resources>
            <wpfApplication1:Name x:Key="nameDataSource"/>
    </Window.Resources>
    <Window.DataContext>
        <Binding Source="{StaticResource nameDataSource}"/>
    </Window.DataContext>
    <StackPanel>
        <TextBlock Text='{Binding Path=First}' />
        <TextBlock Text='{Binding Path=Last}' />
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Label Grid.Row='0' Grid.Column='0'>First</Label>
            <TextBox Grid.Row='0' Grid.Column='1'
Text='{Binding Path=First}' />
            <Label Grid.Row='1' Grid.Column='0'>Last</Label>
            <TextBox Grid.Row='1' Grid.Column='1'
Text='{Binding Path=Last,UpdateSourceTrigger=PropertyChanged}'
/>
        </Grid>
    </StackPanel>
</Window>
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38791253
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
контекст данных по сути это View Model для вашей формы, сам класс модели может содержать в себе другие свойства нужных классов
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38791328
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhНо возник вопрос, если будет несколько датаконтекстов, как с ними работаь в одном окне?
И в чем проблема?
Код: 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.
31.
32.
33.
34.
35.
36.
<Window
  x:Class="wpftest.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition />
      <RowDefinition />
    </Grid.RowDefinitions>
    <TextBox
      VerticalAlignment="Center"
      Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" />
    <Grid
      Grid.Row="1"
      x:Name="Grid2">
      <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
      </Grid.RowDefinitions>
      <TextBox
        VerticalAlignment="Center"
        Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" />
      <Grid
        Grid.Row="1"
        x:Name="Grid3">
        <Grid.RowDefinitions>
          <RowDefinition />
          <RowDefinition />
        </Grid.RowDefinitions>
        <TextBox
          VerticalAlignment="Center"
          Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" />
      </Grid>
    </Grid>
  </Grid>
</Window>


Код: 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.
31.
32.
33.
34.
35.
36.
public partial class MainWindow
{
  public MainWindow()
  {
    InitializeComponent();
    DataContext = new Foo("Grid1");
    Grid2.DataContext = new Foo("Grid2");
    Grid3.DataContext = new Foo("Grid3");
  }
}

class Foo: INotifyPropertyChanged
{
  public Foo(string text)
  {
    _text = text;
  }

  string _text;
  public string Text
  {
    get { return _text; }
    set
    {
      _text = value;
      FirePropertyChanged("Text");
    }
  }

  void FirePropertyChanged(string propertyName)
  {
    if (PropertyChanged!=null)
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  }
  public event PropertyChangedEventHandler PropertyChanged;
}
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38791403
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не понимаю, зачем вам несколько контекстов данных?
при использовании связывания удобно использовать шаблон MVVM, почитайте как писать с помощью такого шаблона модель представления которая и будет контекстом данных для модели View.
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38791421
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesя не понимаю, зачем вам несколько контекстов данных?
Обычная декомпозиция. В одном окне может быть несколько областей с абсолютно разными задачами. Мешать всё это в одну здоровенную вьмодель на все случаи жизни не особенно удобно и разумно.
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38791427
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть корневая модель для окна, в ней композиция других моделей, я же не говорил, что нужно всё в 1 пихать, но есть корневая модель для приложения или окна и т.д.
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38791644
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesя не понимаю, зачем вам несколько контекстов данных?
при использовании связывания удобно использовать шаблон MVVM, почитайте как писать с помощью такого шаблона модель представления которая и будет контекстом данных для модели View.

у меня опыта с WPF нету, пытаюсь разобраться.

Скажем в окне есть контролы с данными из базы, например из 3-х разных вью или таблиц.
Я не вижу, как обойтись одним датаконтекстом.
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38791652
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому, что между твоей моделью данных и представлением должна находиться модель представления, которая будут представлять данные в таком виде, каким этого необходимо для модели представления
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38791762
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesесть корневая модель для окна, в ней композиция других моделей, я же не говорил, что нужно всё в 1 пихать, но есть корневая модель для приложения или окна и т.д.
Я так делал. Когда-то. Потом родился зверек типа
Код: c#
1.
Text = "{Binding Path=Model1.Model2.Model3.Model4....Text}


где этих "других моделей" было штук 7-10 - и решил использовать отдельные датаконтексты. Ничего плохого в этом не вижу.
...
Рейтинг: 0 / 0
Binding: Что здесь не так?
    #38792272
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

да вроде так ни кто и не делает. В анимации правда иногда приходится писать полный путь с типами еще до кучи
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Binding: Что здесь не так?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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