[英]Change child control data-source according to Pivot selected index change
I am trying to change the data source of a child element (in this case a custom user control) of Pivot, when a selected index change occurs.当发生选定索引更改时,我正在尝试更改 Pivot 的子元素(在本例中为自定义用户控件)的数据源。 My Pivot XAML looks like this
我的 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>
And on selected index change并在选定的索引更改上
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;
}
}
My usercontrol code我的用户控制代码
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();
}
}
}
This code always takes Numbers as 0
on selected index change.此代码在选定的索引更改时始终将 Numbers 设为
0
。 I believe this is happening because of InitializeComponent();
我相信这是因为
InitializeComponent();
. . How can i make this work.
我怎样才能使这项工作。 So that when selected index is 0 I get rightbox data and when it is 1 I get leftbox data?
So that when selected index is 0 I get rightbox data and when it is 1 I get leftbox data?
If you want to change Numbers property based on the selectedIndex of pivotItem, you can declare a Numbers DependencyProperty and then use ElementName to bind with the SelectedIndex of Pivot.如果要根据 pivotItem 的 selectedIndex 更改 Numbers 属性,可以声明一个 Numbers DependencyProperty ,然后使用 ElementName 与 Pivot 的 SelectedIndex 绑定。 In that case, you don't need to subscribe the SelectionChanged event.
在这种情况下,您不需要订阅 SelectionChanged 事件。
.xaml: .xaml:
<Pivot x:Name="PivotItemsContainer" SelectedIndex="0" ItemsSource="{x:Bind viewModel.headerElement, Mode=OneWay}">
<Pivot.HeaderTemplate>
<DataTemplate x:DataType="local:UIModel">
<TextBlock Text="{Binding Name, Mode=TwoWay}"/>
</DataTemplate>
</Pivot.HeaderTemplate>
<Pivot.ItemTemplate>
<DataTemplate>
<local:AddressInfoControl Numbers="{Binding ElementName=PivotItemsContainer,Path=SelectedIndex}"></local:AddressInfoControl>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
UserControl.cs:用户控制.cs:
public static readonly DependencyProperty NumbersProperty = DependencyProperty.Register(
"Numbers",
typeof(int),
typeof(AddressInfoControl),
new PropertyMetadata(null, new PropertyChangedCallback(OnLabelChanged))
);
private static void OnLabelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
int s = (int)e.NewValue; //the newValue of Numbers
if (s == 0)
{
//rightbox
}
else if(s == 1)
{
//leftbox
}
}
public int Numbers
{
get { return (int)GetValue(NumbersProperty); }
set { SetValue(NumbersProperty, value); }
}
public AddressInfoControl()
{
this.InitializeComponent();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.