0

我正在使用一些数据模板来显示不同的值,这些数据模板由 DataTemplateSelector 选择。每个控件都有一些数据绑定到我的自定义对象。对象是 ObservableCollection 的一部分,然后 DTS 为它们选择模板。问题是:当我尝试使用一些预定义的对象(在代码中)运行我的应用程序时,所选控件没有值。前任:

  <!--Date Template-->
    <DataTemplate x:Key="DateTemplate">
        <WrapPanel x:Name="DateTemplate_Panel">
            <WrapPanel.DataContext>
                <params:FTParams />
            </WrapPanel.DataContext>
            <Label x:Name="DateTemplate_Label" Content="{Binding Path=Name}" />
            <DatePicker x:Name="DateTemplate_DatePicker" SelectedDate="{Binding Path=SelectedValue}" SelectedDateFormat="Long" />
        </WrapPanel>
    </DataTemplate>

控件仅在我更改其值时才响应(INotifyPropertyChanged已实施)

如果我设置

<Label Content="{Binding Path=SelectedValue}"/> 

然后我在 DataPicker 中选择一个日期,然后正确加载内容。但我真的需要在启动时加载这些值。你能给我一些建议吗?

4

1 回答 1

2

数据模板不应包含嵌入数据。而且您绝对不想从 DT 中实例化 FTParams 的实例。当您在树中的其他位置拥有数据时,DataTemplate 的 DataContext 属性是隐式设置的。

我假设你有某种 ItemsControl,但为了简单起见,让下面的示例有一个内容控件:

<ContentControl ContentTemplate="{StaticResource DateTemplate}">
    <params:FTParams />
</contentControl>

如果您的所有项目都在 ItemsControl 中(ItemsSource 绑定到 ObservableCollection),那么您应该设置 ItemsTemplate 而不是 ContentTemplate,或者如果您想使用模板选择器,请设置 ItemTemplateSelector。

<ItemsControl ItemsSource="{Binding PathToTheObsCollectionProperty}"
    ItemTemplateSelector="{StaticResource MySelector}" />

在所有情况下,DT 都不应该显式设置 DataContext 属性。

然后让您的数据模板没有 DataContext 元素。

于 2012-03-03T09:00:53.013 回答