【问题标题】:Binding String with a label.Text on ContentView inside ListViewItem在 ListViewItem 内的 ContentView 上使用 label.Text 绑定字符串
【发布时间】:2018-05-08 11:53:41
【问题描述】:

我有一个带有 ViewModel 的 ContentPage。此视图包含一个 ListView。

在 XAML 上我有

    <ListView>
    <ListView.ItemTemplate>
        <DataTemplate:>
            <templates:miItemView/>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

在 MiItemView 上,我还有其他带有标签的 contentView。如何将此标签的文本属性与我的 ViewModel 的 String 属性绑定????

我的视图模型:

public class RoutePageViewModel : ViewModelBase
{
    #region Views
    private List<Citizen> _citizens;
    private int _citizensPosition;
    #endregion

public List<Citizen> Citizens
    {
        get { return _citizens; }
        set
        {
            _citizens = value;
            RaisePropertyChanged();
        }
    }

    public String CitizensPosition 
    {
        get { return _citizensPosition; }
        set
        {
            _citizensPosition = value;
            RaisePropertyChanged();
        }
    }

我的项目视图:

<ContentView.Content>
    <Grid
            HorizontalOptions="FillAndExpand"
            RowSpacing="0"
            VerticalOptions="Fill">
        <Grid>

            <!--  Name  -->
            <Label
                    x:Name="myTitle"
                    FontSize="Large"
                    Text="{Binding Name}" />
            <!--  AGE  -->
                <Label
                        FontSize="Small"
                        Text="{Binding Age}" />
        </Grid>
        <local:PositionIndicatorView
                />
    </Grid>

和位置视图:

<StackLayout>
            <Label Style="{StaticResource labelGeneralStyle}" Text="HOW BINDING WITH CitizensPosition />
        </StackLayout>

【问题讨论】:

  • 不应该CitizensPosition 成为Citizen 的一部分吗?然后你可以像绑定AgeName一样绑定它
  • 我不确定。真的我需要两个属性,CitizensPosition(项目的位置)和 TotalItems(列表的总数)。最好的方法是什么?

标签: xamarin mvvm binding xamarin.forms


【解决方案1】:

正如@Gerald 所建议的,您应该将 CitizenPosition 作为您的 Citizen 模型的属性。这是它应该在的地方,因为它对每个公民都有不同的值(与 TotalItems 不同,TotalItems 对整个列表只有一个值)。您尚未包含初始化 Citizens 列表的代码,但您可以在绑定您的列表之前为每个 Citizen 分配一个位置值。

为 PositionView 使用单独的视图会使事情复杂化 - 为什么不将其作为 ItemView xaml 的一部分?然后,您可以直接绑定到 CitizenPosition,就像使用 Age 和 Name 标签一样。

如果需要单独的视图,您需要向 PositionView 添加一个可绑定属性来设置值,以便您可以绑定到它。有关详细信息,请参阅my answer here,或参阅Xamarin bindable properties documentation

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    相关资源
    最近更新 更多