2013-04-11 3 views
0

Im новое на МОФ, и ив с этой проблемой ...DataTemplate внутри DataTemplate

Я хочу, чтобы показать «Комплекс» объект, на мой взгляд на сложный объект с именем WeeklySchedule:

, которые имеют список «Сдвиги»

public class WeeklySchedule 
{ 
    public virtual IEnumerable<Shift> Shifts { get; set; } 
    ..... 
} 


public class Shift 
{ 
    public virtual String EntryTime { get; set; } 
    public virtual String ExitTime { get; set; } 
    ..... 
} 

Im с помощью двух шаблонов данных, чтобы попытаться показать содержание этих объектов:

<DataTemplate x:Key="ShiftlistViewTemplate" DataType="viewModel:WorkScheduleViewModel"> 
      <TextBox Text="{Binding EntryTime}"/> 
      <TextBox Text="{Binding ExitTime}"/> 
     </DataTemplate> 

     <DataTemplate x:Key="WeeklySchedulelistViewTemplate" 
         DataType="viewModel:WorkScheduleViewModel"> 
        <ListView x:Name="ShiftListView" 
           Grid.Column="0" 
           ItemTemplate="{StaticResource ShiftlistViewTemplate}" 
           ItemsSource="{Binding Shifts}" 
           SelectedItem="{Binding SelectedShift, Mode=TwoWay}"/> 
     </DataTemplate> 

В ViewModel:

public class ViewModel : WorkspaceViewModel 
{ 
    public Shift SelectedShift 
    { 
     get 
     { 
      return _selectedShift; 
     } 

     set 
     { 
      if (_selectedShift == value) 
      { 
       return; 
      } 

      _selectedShift = value; 
      RaisePropertyChanged(SelectedShiftPropertyName); 
     } 
    } 
    public ObservableCollection<WorkSchedule> WorkSchedules 
    { 
     get 
     { 
      return _workSchedules; 
     } 

     set 
     { 
      if (_workSchedules == value) 
      { 
       return; 
      } 

      _workSchedules = value; 
      RaisePropertyChanged(WorkSchedulePropertyName); 
     } 
    } 

    public ObservableCollection<Shift> Shifts 
    { 
     get 
     { 
      return _shifts; 
     } 

     set 
     { 
      if (_shifts == value) 
      { 
       return; 
      } 

      _shifts = value; 
      RaisePropertyChanged(ShiftPropertyName); 
     } 
} 

Когда я запускаю его я получаю это обязательные ошибки:

System.Windows.Data Error: 40 : BindingExpression path error: 'SelectedShift' property 
not found on 'object' ''WeeklySchedule' (HashCode=7843366)'. 
BindingExpression:Path=SelectedShift; DataItem='WeeklySchedule' (HashCode=7843366); 
target element is 'ListView' (Name=''); target property is 'SelectedItem' (type 'Object') 

Я действительно не понимаю, что большая часть ошибок, она пытается найти свойство SelectedShift внутри класс WeeklySchedule?

я пытался сделать его как можно более ясно ... Любые идеи ?, Заранее спасибо

ответ

2

Ваш DataTemplateDataContext имеет тип WorkScheduleViewModel и SelectedShift не существует в WorkScheduleViewModel. Таким образом, вы должны будете установить ListViewsDataContext на ваш ViewModel

Что-то, как это должно работать

<ListView x:Name="ShiftListView" 
       DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ViewModel}}}" 
       Grid.Column="0" 
       ItemTemplate="{StaticResource ShiftlistViewTemplate}" 
       ItemsSource="{Binding Shifts}" 
       SelectedItem="{Binding SelectedShift, Mode=TwoWay}"/> 
Смежные вопросы