【发布时间】:2020-04-06 07:08:37
【问题描述】:
当发生选定的索引变更时,我正在尝试更改子元素(在这种情况下是自定义用户控件)的数据源。 我的 Pivot XAML 看起来像这样
<Pivot x:Name="PivotItemsContainer" ItemsSource="{x:Bind viewModel.headerElement, Mode=OneWay}" SelectionChanged="Pivot_SelectionChanged" >
<Pivot.HeaderTemplate>
<DataTemplate x:DataType="models:HeaderUIModel">
<TextBlock Text="{Binding Name, Mode=OneWay}"/>
</DataTemplate>
</Pivot.HeaderTemplate>
<Pivot.ItemTemplate>
<DataTemplate>
<local1:AddressInfoControl></local1:AddressInfoControl>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
在选定的索引更改上
private void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
AddressInfoControl aic = new AddressInfoControl();
switch (PivotItemsContainer.SelectedIndex)
{
case 0:
aic.Numbers = 0;
break;
case 1:
aic.Numbers = 1;
break;
default:
// code block
break;
}
}
我的用户控制代码
AddressInfoMock aim = new AddressInfoMock();
private int _numbers;
public int Numbers
{
set
{
_numbers = value;
//when the numbers be changed
if (Numbers == 0)
{
AddressContainer.DataContext = aim.GetRightBoxDetails();
}
else
{
AddressContainer.DataContext = aim.GetLeftBoxDetails();
}
}
get
{
return _numbers;
}
}
public AddressInfoControl()
{
InitializeComponent();
if (Numbers == 0)
{
AddressContainer.DataContext = aim.GetRightBoxDetails();
}
else
{
AddressContainer.DataContext = aim.GetLeftBoxDetails();
}
}
}
此代码在选定的索引更改时始终将数字作为0。我相信这是因为InitializeComponent(); 而发生的。我怎样才能使这项工作。 So that when selected index is 0 I get rightbox data and when it is 1 I get leftbox data?
【问题讨论】:
-
关于“此代码在选定索引更改时始终将数字作为0”,您的意思是xaml中的AddressInfoControl的数量仍然是0吗?从您的代码中,当触发 SelectionChanged 事件时,您将创建一个新的 AddressInfoControl,然后根据 SelectedIndex 更改其 Numder。但没有更改 xaml 中的 AddressInfoControl 的数量。为什么要在 SelectionChanged 事件中创建一个新的 AddressInfoControl 实例?你真的想从 xaml 中获取 PivotItem 中的 AddressInfoControl 吗?
-
我只想让我的用户控件知道哪个数据透视项当前处于活动状态并相应地绑定数据