2013-09-13 2 views
0

У меня есть модель:MVVM ObservableCollection и связывание

public class Table : ViewModelBase 
{ 
    private int _id; 
    private string _north; 
    private string _east; 
    private string _south; 
    private string _west; 

    public int Id 
    { 
     get 
     { 
      return _id; 
     } 
     set 
     { 
      _id = value; OnPropertyChanged(); 
     } 
    } 

    public string North 
    { 
     get { return _north; } 
     set { _north = value; OnPropertyChanged();} 
    } 

    public string East 
    { 
     get { return _east; } 
     set { _east = value; OnPropertyChanged();} 
    } 

    public string South 
    { 
     get { return _south; } 
     set { _south = value; OnPropertyChanged();} 
    } 

    public string West 
    { 
     get { return _west; } 
     set { _west = value; OnPropertyChanged();} 
    } 
} 

Также ViewModel где список таблиц объявленную:

  Tables = new ObservableCollection<Table>(); 

И в XAML:

<ScrollViewer.Resources> 
       <ItemsPanelTemplate x:Name="MyWrapPanel"> 
        <toolkit:WrapPanel MinWidth="250" Width="{Binding ViewportWidth, ElementName=MyScrollViewer}" /> 
       </ItemsPanelTemplate> 
      </ScrollViewer.Resources> 

      <ItemsControl ItemsSource="{Binding Tables}" ItemsPanel="{StaticResource MyWrapPanel}" Grid.RowSpan="2" Grid.Row="1"> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <controls:TableControl 
          TableNumber="{Binding Id}" 
          North="{Binding North}" 
          East="{Binding East}" 
          South="{Binding South}" 
          West="{Binding West}" 
          /> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 

     </ScrollViewer> 

Но когда я добавлять элементы Список таблиц, все в порядке. Но

TableNumber="{Binding Id}" 
North="{Binding North}" 
East="{Binding East}" 
South="{Binding South}" 
West="{Binding West}" 

не связаны на самом деле.

+0

Что такое 'ViewModelBase'? Вам нужно указать имя свойства в 'OnPropertyChanged();'. Это происходит в «ViewModelBase» через отражение или что-то еще? – PoweredByOrange

+0

опубликуйте код и XAML 'TableControl'. –

+0

@PoweredByOrange, это [функция в .Net 4.5] (http://blog.develop.com/inotifypropertychanged-in-net-45utm_campaigndevelopments-April-2012utm_sourcedevelopments/) –

ответ

0

В Xaml файле вашего пользовательского элемента управления с именем TableControl, добавьте DataContext={Binding}в корневом элементе, и я думаю, что должны работать (если ее нет).

Это может быть также не работает, если у вас есть DataContext установить внутри код позади вашего контроля пользователя (например, TableControl.xaml.cs) файл что-то вроде this.DataContext = this;, что делает пользовательский элемент управления не использовать DataContext из Tables коллекции.

Вы можете использовать this SO Answer, чтобы проверить, что именно находится в DataContext вашего пользовательского элемента управления TableControl.

Edit:

Try ниже также, потому что, как за ваш комментарий, DataContext для TableControl противоречивы:

<DataTemplate> 
    <controls:TableControl DataContext="{Binding}" 
     TableNumber="{Binding Id}" 
     North="{Binding North}" 
     East="{Binding East}" 
     South="{Binding South}" 
     West="{Binding West}" 
     /> 
</DataTemplate> 
+0

Код был DataContext = this; и некоторые DependanceProperites. Ничего интересного на самом деле :) – alerya

+0

@alerya обновил ответ, чтобы добавить XAML в соответствии с вашим комментарием. Проверьте, работает ли он иначе, вам нужно будет найти другую альтернативу. – VS1

+0

DataContext = "{Binding}" добавлено, но {Binding Id} кажется неправильным – alerya

Смежные вопросы