说我有一个只读模型......
[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来说还是比较新的。
谢谢!
答案 0 :(得分:1)
更改您的视图单元格
<ViewCell>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding FirstName}"
<Label Text=" "
<Label Text="{Binding LastName}"
</StackLayout>
</ViewCell>
其他方式
定义一个自定义对象
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)使用Getter定义一个集合
public IEnumerable<CustomPerson> CustomCollection
{
get { return _personSearchCollection.Select(p => new CustomPerson(p)); }
}
更新人员搜索集合时,为自定义集合更改属性更改。