Xamarin Привязка данных из ItemSource к тексту меток - PullRequest
0 голосов
/ 11 октября 2018

У меня есть 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 Ответ

0 голосов
/ 11 октября 2018

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

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}"
...