Как ссылаться на индикатор выполнения внутри CollectionView? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть CollectionView, на его шаблоне данных есть индикатор выполнения. Я могу найти соответствующий индекс элемента ObservableCollection, но как я могу ссылаться на соответствующее представление ProgressBar? Мне нужно вызвать метод ProgressTo (), или я могу просто связать свойство прогресса со свойством элемента в коллекции?

1 Ответ

0 голосов
/ 30 апреля 2020

Боюсь, что вы не можете напрямую использовать ProgressTo, потому что вы не можете напрямую получить доступ к элементу управления Progreeebar в CollectionView.

Если вы все еще хотите получить ProgressBar и вызвать метод ProgressTo (), вы можете рассмотреть чтобы добавить Button в табличную форму данных CollectionView, например:

<CollectionView ItemsSource="{Binding barmodels}" SelectionMode="Single">
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <StackLayout>
                        <Label Text="{Binding str}" />
                        <ProgressBar Progress="{Binding value}" />
                        <Button Clicked="Button_Clicked" Text="btn1" />
                    </StackLayout>

                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>

Затем вы можете получить текущий элемент управления ProgressBar с помощью Button.Click.

 public partial class Page7 : ContentPage
{
    public ObservableCollection<barmodel> barmodels { get; set; }
    public Page7()
    {
        InitializeComponent();

        barmodels = new ObservableCollection<barmodel>()
        {
            new barmodel(){str="test 1",value=0.1},
            new barmodel(){str="test 2",value=0.2},
            new barmodel(){str="test 3",value=0.3},
            new barmodel(){str="test 4",value=0.4},
            new barmodel(){str="test 5",value=0.5}
        };
        this.BindingContext = this;
    }  
    private void Button_Clicked(object sender, EventArgs e)
    {
        // access buttonclickhandler  
        var buttonClickHandler = (Button)sender;

        // access Parent Layout for Button  
        StackLayout ParentStackLayout = (StackLayout)buttonClickHandler.Parent;
        ProgressBar progressbar = (ProgressBar)ParentStackLayout.Children[1];
        progressbar.ProgressTo(0.75, 500, Easing.Linear);
    }
}

public class barmodel
{
    public string str { get; set; }
    public double value { get; set; }
}

Но я не советую вам это делать Я думаю, лучше использовать связывание Progress для ProgressBar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...