首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTemplate中的DataTemplate

DataTemplate中的DataTemplate
EN

Stack Overflow用户
提问于 2013-04-12 06:28:30
回答 1查看 256关注 0票数 0

我是wpf的新手,我一直有这个问题...

我想在我的视图中显示一个“复杂”对象,名为WeeklySchedule的复杂对象:

有一个“班次”列表

代码语言:javascript
复制
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; }
    .....
}

我正在使用两个数据模板来尝试显示这些对象中的内容:

代码语言:javascript
复制
<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中:

代码语言:javascript
复制
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);
        }
}

当我运行它时,我得到这个绑定错误:

代码语言:javascript
复制
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')

我真的不理解这么多错误,它是不是试图在WeeklySchedule类中查找属性SelectedShift??

我试着说的越清楚越好...有什么好主意吗?,提前谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-04-12 07:05:23

您的DataTemplate DataContext的类型为WorkScheduleViewModel,并且WorkScheduleViewModel中不存在SelectedShift。因此,您必须将ListViews DataContext设置为ViewModel

像这样的东西应该是可行的

代码语言:javascript
复制
   <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}"/>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15959971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档