Xamarin MVVM自定义模型属性?

时间:2017-08-18 01:13:47

标签: c# xamarin mvvm

说我有一个只读模型......

[DataContract]
public partial class Person {
    [DataMember]
    public virtual string LastName { get; set; }

    [DataMember]
    public virtual string FirstName { get; set; }
}

观点......

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="TheApp.APage"
    BackgroundColor="#03264A"
    Padding="0,0,0,0">
    <ContentPage.Content>
        <StackLayout
            BackgroundColor="Transparent">
            <ListView 
                ItemsSource="{Binding PersonSearchCollection}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Label
                                Text="{Binding FirstName}" />
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

ViewModel(基本理念)

namespace TheApp.ViewModels {
    public class APagePageViewModel : Helpers.BindableBase {

        private ObservableCollection<Person> _PersonSearchCollection = new RangeObservableCollection<Person>();

        public ObservableCollection<Person> PersonSearchCollection {
            get { return _PersonSearchCollection; }
            set { SetProperty(ref _PersonSearchCollection, value); }
        }
    }
}

我的ListView绑定到类型为:Person的ObservableCollection。当用户键入要搜索的名称时,这将从ServiceStack调用中填充。

目前DataTemplate中的Label绑定到FirstName,但我希望它是一个新属性:FullName(Person.FirstName +&#34;&#34; + Person.LastName)。

如何将属性添加到模型中我无法编辑?我是否需要为模型本身使用单独的VM并将ObservableCollection更改为该类型?任何例子都会很棒!

很抱歉,如果这是一个基本问题,我对Xamarin来说还是比较新的。

谢谢!

1 个答案:

答案 0 :(得分:1)

更改您的视图单元格

<ViewCell>
 <StackLayout Orientation="Horizontal">
  <Label Text="{Binding FirstName}"
  <Label Text=" "
  <Label Text="{Binding LastName}"
 </StackLayout>
</ViewCell>

其他方式

  1. 定义一个自定义对象

    public class CustomPerson
        {
            public CustomPerson(Person P)
            {
                FirstName = P.FirstName;
                LastName = P.LastName;
            }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public string FullName
            {
                get { return string.Format("{0} {1}", FirstName, LastName);}
            }
    
        }
    
  2. (2)使用Getter定义一个集合

    public IEnumerable<CustomPerson> CustomCollection
     {
      get { return _personSearchCollection.Select(p => new CustomPerson(p)); }
     } 
    
      

    更新人员搜索集合时,为自定义集合更改属性更改。

    1. 最后使用CustomCollection进行绑定