【问题标题】:Change child control data-source according to Pivot selected index change根据 Pivot selected index 更改更改子控件数据源
【发布时间】: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 吗?
  • 我只想让我的用户控件知道哪个数据透视项当前处于活动状态并相应地绑定数据

标签: c# .net xaml uwp


【解决方案1】:

如果你想根据pivotItem的selectedIndex来改变Numbers属性,你可以声明一个NumbersDependencyProperty,然后使用ElementName绑定Pivot的SelectedIndex。在这种情况下,您不需要订阅 SelectionChanged 事件。

.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:

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();
}

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 2014-08-04
    • 2019-03-30
    • 1970-01-01
    • 2021-05-07
    • 2022-10-15
    相关资源
    最近更新 更多