У меня есть 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; }
}
да, подождите секунду, я тоже добавлю код
Я все еще не понимаю, чего ты хочешь. вы сказали: «но для начала я хочу иметь только текущее значение« Текст »(из текущего самого нового объекта в списке). Но: мне нужен не только счетчик.». объясни это немного лучше





Вы можете добавить свойство в свою модель просмотра, чтобы получить правильное значение:
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}" работает, а первый нет?
Вы имеете в виду это <TextCell Text = "{Binding Num}" />?
моя первая цель - только «увидеть» что-то на первом ярлыке (тот, который отмечен знаком * в конце строки). его сейчас пусто.
<Label Text = "{Binding Path=Nummer, Source=Num}" не может работать, потому что Nummer - это коллекция, а не единичная модель. Таким образом, вы должны получить одну модель, в которой вы хотите получить доступ к свойству Sum. Вы пробовали мой код? Это работает только ПОСЛЕ того, как вы нажали кнопку + 1
Я пробовал, но там было несколько ошибок (из-за "int to string" в методе last (), и он не получил персонал с измененным свойством даже с получением пространства имен ...)
и как вы можете видеть в моем коде: есть текстовая ячейка, в которой она работает ... так что единственное отличие состоит в том, что вторая текстовая ячейка имеет "источник элементов" из списка
Понятно, подумал, вы знаете, как реализовать INotifyPropertyChanged. Тогда позвольте мне добавить для вас несколько дополнительных строк
Конечно, TextCell работает, потому что вы не ссылаетесь на ObservalbleCollection, вы ссылаетесь на модель внутри коллекции.
у меня уже есть материал Inotify .. не знаю, почему он не распознает propchange
и с лейблом тоже нет возможности сделать то же самое?
Я не знаю ни одного такого простого, как я тебе сказал
Поэтому для преобразования из int в строку просто добавьте в конец .ToString (). Я отредактировал решение для вас
Не могли бы вы отредактировать свою ветку, чтобы объяснить это более подробно, пожалуйста? Итак, когда вы нажимаете кнопку «+1», в ListViews ItemsSource добавляется новый элемент?