Привязка данных Xamarin из ItemSource к тексту меток

У меня есть 2 вещи: вторая - список. когда я нажимаю кнопку «+1», создается новый элемент с именем «list.Count» (так что первым будет 1, 2, 3, 4 ...). это работает очень хорошо. но для начала я хочу иметь только текущее значение «Текст» (из текущего самого нового объекта в списке). Но: мне нужен не только счетчик. Может быть, вы лучше поймете, если посмотрите мой код:

<StackLayout>
<StackLayout>
    <StackLayout Orientation = "Horizontal" >
        <Label Text = "Erg:" HorizontalOptions = "StartAndExpand" VerticalOptions = "StartAndExpand" />
        <Label Text = "{Binding Path=Nummer, Source=Num}" HorizontalOptions = "EndAndExpand" VerticalOptions = "StartAndExpand" /> *
    </StackLayout>
        <Button Text = "+1" Command = "{Binding CountUpCommand}" />  **
    <Button Text = "Erg x Erg" />
</StackLayout>
<Label Text = "--------------" />
<StackLayout>
    <ListView ItemsSource = "{Binding Nummer}"> **
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell 
                Text = "{Binding Num}" **
                />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</StackLayout>
</StackLayout>

поэтому мой вопрос находится в строке с одним * в конце. остальные 3 строки с двумя ** работают. что мне нужно сделать, чтобы получить правильный Binding-Path или -Statment или что-то в этом роде, чтобы число отображалось в labelText? я думаю, что чего-то не хватает вроде "itemsource" ..

Итак, вот код из Itemsource (из My CounterVM):

    public ObservableCollection<NumberViewModel> Nummer { get; private set; } = new ObservableCollection<NumberViewModel>();


    public ICommand CountUpCommand { get; private set; }

    public CounterViewModel()
    {

        CountUpCommand = new Command(CountUp);
    }


    public void CountUp()
    {
        int newNumber = Nummer.Count + 1;
        Nummer.Add(new NumberViewModel { Num = newNumber});
    }

а здесь NumverVM, тот же код, что и в number.cs:

public class NumberViewModel : BaseViewModel
{
    public int Num { get; set; }
}

Не могли бы вы отредактировать свою ветку, чтобы объяснить это более подробно, пожалуйста? Итак, когда вы нажимаете кнопку «+1», в ListViews ItemsSource добавляется новый элемент?

Daniel DirtyNative Martin 11.10.2018 15:32

да, подождите секунду, я тоже добавлю код

S Kirchner 11.10.2018 15:34

Я все еще не понимаю, чего ты хочешь. вы сказали: «но для начала я хочу иметь только текущее значение« Текст »(из текущего самого нового объекта в списке). Но: мне нужен не только счетчик.». объясни это немного лучше

Daniel DirtyNative Martin 11.10.2018 15:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете добавить свойство в свою модель просмотра, чтобы получить правильное значение:

public class CounterViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    public string LastItemsText => Nummer.Last()?.Num.ToString();

    public ObservableCollection<NumberViewModel> Nummer { get; private set; } = new ObservableCollection<NumberViewModel>();

    public ICommand CountUpCommand { get; private set; }

    public CounterViewModel()
    {
        CountUpCommand = new Command(CountUp);
    }

    public void CountUp()
    {
        int newNumber = Nummer.Count + 1;
        Nummer.Add(new NumberViewModel { Num = newNumber});
        PropertyChanged(this, new PropertyChangedEventArgs(nameof(LastItemsText));
    }
}

И вместо

<Label Text = "{Binding Path=Nummer, Source=Num}"

сделай это:

<Label Text = "{Binding LastItemsText}"

нет, в вашем решении разные ошибки ... первая проблема для меня - это привязка данных, почему в xaml второй Text = "{Binding Num}" работает, а первый нет?

S Kirchner 12.10.2018 10:10

Вы имеете в виду это <TextCell Text = "{Binding Num}" />?

Daniel DirtyNative Martin 12.10.2018 10:12

моя первая цель - только «увидеть» что-то на первом ярлыке (тот, который отмечен знаком * в конце строки). его сейчас пусто.

S Kirchner 12.10.2018 10:58
<Label Text = "{Binding Path=Nummer, Source=Num}" не может работать, потому что Nummer - это коллекция, а не единичная модель. Таким образом, вы должны получить одну модель, в которой вы хотите получить доступ к свойству Sum. Вы пробовали мой код? Это работает только ПОСЛЕ того, как вы нажали кнопку + 1
Daniel DirtyNative Martin 12.10.2018 11:01

Я пробовал, но там было несколько ошибок (из-за "int to string" в методе last (), и он не получил персонал с измененным свойством даже с получением пространства имен ...)

S Kirchner 12.10.2018 11:07

и как вы можете видеть в моем коде: есть текстовая ячейка, в которой она работает ... так что единственное отличие состоит в том, что вторая текстовая ячейка имеет "источник элементов" из списка

S Kirchner 12.10.2018 11:08

Понятно, подумал, вы знаете, как реализовать INotifyPropertyChanged. Тогда позвольте мне добавить для вас несколько дополнительных строк

Daniel DirtyNative Martin 12.10.2018 11:08

Конечно, TextCell работает, потому что вы не ссылаетесь на ObservalbleCollection, вы ссылаетесь на модель внутри коллекции.

Daniel DirtyNative Martin 12.10.2018 11:11

у меня уже есть материал Inotify .. не знаю, почему он не распознает propchange

S Kirchner 12.10.2018 11:11

и с лейблом тоже нет возможности сделать то же самое?

S Kirchner 12.10.2018 11:12

Я не знаю ни одного такого простого, как я тебе сказал

Daniel DirtyNative Martin 12.10.2018 11:13

Поэтому для преобразования из int в строку просто добавьте в конец .ToString (). Я отредактировал решение для вас

Daniel DirtyNative Martin 12.10.2018 11:20

Другие вопросы по теме