Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Binding: Что здесь не так? / 12 сообщений из 12, страница 1 из 1
29.10.2014, 13:48
    #38790664
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Binding: Что здесь не так?
Пытаюсь пустить пример из книжки, но не работает, то есть не показывает значения введенные в поля в рид-онли полях.
В отладчике вообще не заходит в 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
29.10.2014, 14:45
    #38790760
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Binding: Что здесь не так?
Датаконтекст окну нужно задать.
...
Рейтинг: 0 / 0
29.10.2014, 15:06
    #38790793
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Binding: Что здесь не так?
Сон Веры ПавловныДатаконтекст окну нужно задать.

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

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

Код: 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
30.10.2014, 00:04
    #38791253
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Binding: Что здесь не так?
контекст данных по сути это View Model для вашей формы, сам класс модели может содержать в себе другие свойства нужных классов
...
Рейтинг: 0 / 0
30.10.2014, 06:44
    #38791328
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Binding: Что здесь не так?
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
30.10.2014, 09:09
    #38791403
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Binding: Что здесь не так?
я не понимаю, зачем вам несколько контекстов данных?
при использовании связывания удобно использовать шаблон MVVM, почитайте как писать с помощью такого шаблона модель представления которая и будет контекстом данных для модели View.
...
Рейтинг: 0 / 0
30.10.2014, 09:28
    #38791421
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Binding: Что здесь не так?
Roman Mejtesя не понимаю, зачем вам несколько контекстов данных?
Обычная декомпозиция. В одном окне может быть несколько областей с абсолютно разными задачами. Мешать всё это в одну здоровенную вьмодель на все случаи жизни не особенно удобно и разумно.
...
Рейтинг: 0 / 0
30.10.2014, 09:36
    #38791427
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Binding: Что здесь не так?
есть корневая модель для окна, в ней композиция других моделей, я же не говорил, что нужно всё в 1 пихать, но есть корневая модель для приложения или окна и т.д.
...
Рейтинг: 0 / 0
30.10.2014, 13:32
    #38791644
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Binding: Что здесь не так?
Roman Mejtesя не понимаю, зачем вам несколько контекстов данных?
при использовании связывания удобно использовать шаблон MVVM, почитайте как писать с помощью такого шаблона модель представления которая и будет контекстом данных для модели View.

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

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


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

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


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