Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / привязка данных в mvvm для простой формы / 15 сообщений из 15, страница 1 из 1
31.07.2012, 10:01
    #37898658
привязка данных в mvvm для простой формы
Тут есть некоторые непонятки с привязкой данных в mvvm для простой формы, не списка.

Вот вью:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 <Window x:Class="WpfClient.MapView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MapView" Height="343" Width="709" ResizeMode="NoResize" ShowInTaskbar="False">
    <Grid DataContext="{Binding Path = Map}"> 
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="33" />
        </Grid.RowDefinitions>
        
        <TextBox Height="23" HorizontalAlignment="Right" Margin="0,102,48,0" Name="textBox1" Text="{Binding Path=Name}" VerticalAlignment="Top" Width="187" />
        <Label Content="Название:" Height="28" HorizontalAlignment="Left" Margin="378,100,0,0" Name="label1" VerticalAlignment="Top" Width="68" />
        <Label Content="Склад:" Height="28" HorizontalAlignment="Left" Margin="378,131,0,0" Name="label2" VerticalAlignment="Top" Width="68" />
        <ComboBox DisplayMemberPath="Name1" Height="23" HorizontalAlignment="Left" ItemsSource="{Binding Path=WHouses}" Margin="452,131,0,0" Name="comboBox1" SelectedValuePath="Id1" VerticalAlignment="Top" Width="144" />
        <Button Grid.Row="1" Content="Сохранить" Height="23" HorizontalAlignment="Left" Margin="268,0,0,0" Name="btnSave" VerticalAlignment="Top" Width="75" />
        <Button Grid.Row="1" Content="Отменить" Height="23" HorizontalAlignment="Left" Margin="345,0,0,0" Name="btnCancel" VerticalAlignment="Top" Width="75" />
    </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.
public class MapViewModel
{
    MapGate mapGate;

    public Map Map { get; set; }
    public List<WHouse> WHouses { get; set; }

    public MapViewModel(int MapID)
    {
        mapGate = new MapGate();
        this.Map = mapGate.GetMap(MapID);

        Init();
    }

    public MapViewModel()
    {
        Init();
    }

    void Init()
    {
        WHouseGate whouseGate = new WHouseGate();
        WHouses = whouseGate.GetWHouseList();
    }
}



если я убираю привязку DataContext="{Binding Path = Map}", то ComboBox работает - в нем есть строки.
если я добавляю DataContext="{Binding Path = Map}", то привязка работает, но у комбобокса нет строк.
что не так?
...
Рейтинг: 0 / 0
31.07.2012, 10:47
    #37898725
F#
F#
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
привязка данных в mvvm для простой формы
привязка данных в mvvm,

а если на комбобоксе сделать DataContext="{Binding}"
...
Рейтинг: 0 / 0
31.07.2012, 10:53
    #37898734
привязка данных в mvvm для простой формы
F#,

не помогло, к сожалению
...
Рейтинг: 0 / 0
31.07.2012, 11:26
    #37898785
F#
F#
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
привязка данных в mvvm для простой формы
...
Рейтинг: 0 / 0
31.07.2012, 12:07
    #37898843
привязка данных в mvvm для простой формы
F#привязка данных в mvvm,

http://stackoverflow.com/questions/630767/how-can-i-access-the-root-datacontext-in-a-datatemplate-in-wpf

и это не помогло :(
у меня здесь чуть другой случай - не DataGrid, а простая форма с элементами управления.
может я неправильно привязываю данные к самой форме?
...
Рейтинг: 0 / 0
31.07.2012, 12:11
    #37898855
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
привязка данных в mvvm для простой формы
привязка данных в mvvmчто не так?Смотри в отладке в VS в окошке Output->Debug.
...
Рейтинг: 0 / 0
31.07.2012, 12:18
    #37898865
привязка данных в mvvm для простой формы
Алексей Кпривязка данных в mvvmчто не так?Смотри в отладке в VS в окошке Output->Debug.
о, теплее :)

System.Windows.Data Error: 40 : BindingExpression path error: 'WHouses' property not found on 'object' ''Map' (HashCode=21883591)'. BindingExpression:Path=WHouses; DataItem='Map' (HashCode=21883591); target element is 'ComboBox' (Name='comboBox1'); target property is 'ItemsSource' (type 'IEnumerable')

и в случае, как было посоветовано по ссылке:
System.Windows.Data Error: 40 : BindingExpression path error: 'DataContext' property not found on 'object' ''Map' (HashCode=48565132)'. BindingExpression:Path=DataContext.WHouses; DataItem='Map' (HashCode=48565132); target element is 'ComboBox' (Name='comboBox1'); target property is 'ItemsSource' (type 'IEnumerable')

т.е. смотрит WHouses не там.
а как тогда указать правильно?
...
Рейтинг: 0 / 0
31.07.2012, 12:28
    #37898878
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
привязка данных в mvvm для простой формы
Потому что
Код: xml
1.
<Grid DataContext="{Binding Path = Map}">

Надо убрать.
...
Рейтинг: 0 / 0
31.07.2012, 12:31
    #37898883
привязка данных в mvvm для простой формы
Алексей К,

да, я это убирал - работало.
но как мне тогда обьект Map привязать к элементам управления формы?
...
Рейтинг: 0 / 0
31.07.2012, 13:15
    #37898979
F#
F#
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
привязка данных в mvvm для простой формы
привязка данных в mvvmSystem.Windows.Data Error: 40 : BindingExpression path error: 'DataContext' property not found on 'object' ''Map' (HashCode=48565132)'. BindingExpression:Path=DataContext.WHouses; DataItem='Map' (HashCode=48565132); target element is 'ComboBox' (Name='comboBox1'); target property is 'ItemsSource' (type 'IEnumerable')


А к Window добавили атрибут Name="TheWindow"? Там же ElementName=TheWindow
...
Рейтинг: 0 / 0
31.07.2012, 13:19
    #37898988
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
привязка данных в mvvm для простой формы
привязка данных в mvvmда, я это убирал - работало.
но как мне тогда обьект Map привязать к элементам управления формы?
Код: xml
1.
<MyControl MyProperty="{Binding Map.MapInnerProperty}"/>


?
...
Рейтинг: 0 / 0
01.08.2012, 12:32
    #37900237
привязка данных в mvvm для простой формы
Алексей К
Код: xml
1.
<MyControl MyProperty="{Binding Map.MapInnerProperty}"/>


?
вот это сработало, спасибо.
...
Рейтинг: 0 / 0
01.08.2012, 12:39
    #37900253
привязка данных в mvvm для простой формы
тут только еше вопрос возник.

для того, чтобы при изменении обьекта в модели менялось значение в поле сделал:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public Map Map
{
    get { return map; }
    set
    {
        map = value;
        OnPropertyChanged("Map");
    }
}

плюс прибиндил поле так: Text="{Binding Path = Map.Name, Mode = TwoWay}"

меняется только если после, например, Map.Name = 'что-то' обязательно сделаю Map = Map.
вот как-то хочется избавиться от этого Map = Map или, что то-же от OnPropertyChanged("Map").
никак нельзя?
...
Рейтинг: 0 / 0
01.08.2012, 12:49
    #37900265
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
привязка данных в mvvm для простой формы
привязка данных в mvvm,

Реализовать INotifyPropertyChanged для Map и его свойства Name.
...
Рейтинг: 0 / 0
01.08.2012, 13:00
    #37900291
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
привязка данных в mvvm для простой формы
привязка данных в mvvm,

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


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