Ok 我有一个容器, 我为它创建了两个数据模板。 基本上一个模板将显示5个文本框, 并显示与它们连接的数据, 而另一个模板将显示添加该特定对象的按钮。 我分级的数据模板选择器和它有效, 但当我浏览记录时, “ 选择器” 将永远不再被调用 。
那么我该如何让容器重新选择其模板 。 容器是一个堆积板, 我已经尝试过“ 更新视觉”、“ 无效视觉”、“ 无效结构” 和“ 应用模板 ” 。
XAML 代码
<DataTemplate x:Key="advisorTemplate">
<StackPanel Orientation="Vertical" Margin="2,2,2,2" HorizontalAlignment="Stretch" VerticalAlignment="Top">
<StackPanel Orientation="Horizontal" Margin="2,2,2,2" HorizontalAlignment="Center">
<extToolkit:WatermarkTextBox Name="txtAcadAdv" Watermark="Acad Adv" Width="125" Margin="2" Text="{Binding Path=Adv.AcadAdv}"/>
<extToolkit:WatermarkTextBox Name="txtProgAdv" Watermark="Prog Adv" Width="125" Margin="2" Text="{Binding Path=Adv.ProgAdv}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="2,2,2,2" HorizontalAlignment="Center">
<extToolkit:WatermarkTextBox Name="txtPortAdv" Watermark="Port Adv" Width="125" Margin="2" Text="{Binding Path=Adv.PortAdv}"/>
<extToolkit:WatermarkTextBox Name="txtEleTws" Watermark="Ele Tws" Width="125" Margin="2" Text="{Binding Path=Adv.EleTws}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="2,2,2,2" HorizontalAlignment="Center">
<extToolkit:WatermarkTextBox Name="txtMatTws" Watermark="Mat Tws" Width="125" Margin="2" Text="{Binding Path=Adv.MatTws}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="addAdvisor">
<Button HorizontalAlignment="Center" VerticalAlignment="Center" Margin="2" Name="btnAddAdvisor" Click="ButtonClick" Content="Add Advisor"/>
</DataTemplate>
组框上内容修改的初始化
grpAdv.ContentTemplateSelector = _advisorSelector;
最后是选择代码
private readonly StudentWin _win;
public AdvisorDataTemplateSelector(StudentWin win)
{
_win = win;
}
public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
{
var sp = item as StackPanel;
var adv = sp.DataContext as Advisor;
if (adv == null)
return _win.FindResource("addAdvisor") as DataTemplate;
return _win.FindResource("advisorTemplate") as DataTemplate;
}
这是我的导航代码的片段
case "btnNext":
{
if(_view.CurrentPosition < _view.Count - 1)
{
CheckForUnusedReferences(_view.GetItemAt(_view.CurrentPosition) as Student);
_view.MoveCurrentToNext();
CheckForNullReferences(_view.CurrentPosition);
grpAdv.ApplyTemplate();
}
}
另外两种方法是检查学生是否不存在关系,然后创建关系并将其添加到我的数据背景中,否则实体框架将无法保存这些变化。 以上数据模板将基本上帮助我解决一个问题,即当我试图创建新学生时,没有学生身份标识。