Xamarin将数据从ItemSource绑定到标签文本

时间:2018-10-11 13:24:51

标签: c# visual-studio xamarin binding

我有两件事:第二件事是清单。当我单击“ +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个**的3行正在工作。我该怎么做才能获取正确的Binding-Path或-Statment或类似的东西,以获取显示在labelsText上的数字?我认为这里缺少像“ 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 :(得分:1)

您可以在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}"