我试图将一个selectableItemsView放在一起以填充对象列表,由于某种原因,我没有让任何项目显示在SelectableItemsView中;我只能在项目应该放置的地方留白空白。 TermView被插入到mainPage中,并且应该包含Term信息以及通过SelectableItemsView显示的Class列表。我也尝试过使用ListView及其给我同样的问题。
TermView.xaml.cs构造函数
public TermView(int termId)
{
InitializeComponent();
this.Term = new Term(termId);
this.BindingContext = this.Term;
}
TermView.xaml
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="TermManager1.TermView">
<StackLayout VerticalOptions="Start" >
<FlexLayout AlignItems="Center" Direction="Row" JustifyContent="SpaceBetween" VerticalOptions="Start">
<DatePicker Date="{Binding TermStartDate}" />
<Editor Text="{Binding TermName}" />
<DatePicker Date="{Binding TermEndDate}" />
</FlexLayout>
<SelectableItemsView x:Name="ClassesCollectionView" ItemsSource="{Binding classes}" >
<SelectableItemsView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding ClassName}"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</SelectableItemsView.ItemTemplate>
</SelectableItemsView>
<FlexLayout>
<Button Text="Add Class" Clicked="AddClassButton_OnClicked" />
<Button Text="Delete Class" Clicked="DeleteClassButton_OnClicked" />
</FlexLayout>
</StackLayout>
</ContentView>
术语类构造器和类列表
public List<Class> classes = new List<Class>();
public Term(int termID)
{
this.TermId = termID;
this.TermName = String.Concat("TermName", termID);
this.classes.Add(new Class());
this.classes.Add(new Class());
this.classes.Add(new Class());
this.classes.Add(new Class());
}
类的类构造器
public Class()
{
this.ClassName = "ClassName";
this.ClassId = 0;
this.ClassStatus = "Unset Status";
}
答案 0 :(得分:0)
您可能只需要使用INPC即可。
将类更改为ObservableCollection而不是List(请注意,还有一个ToObservableCollection扩展可用)。
然后对于Class对象,只需继承自BindableObject,然后在setter中使用OnPropertyChanged()获取要更新的属性,例如:
private string _className;
public string ClassName;
{
get => _className;
set
{
_className = value;
OnPropertyChanged();
}
}
答案 1 :(得分:0)
因此,我通过各种方法解决了我的问题。首先,我用CollectionView替换了SelectableItemsView。然后,我将类列表更改为ObservableCollection。最后,我用StackLayout替换了TermView xaml中的ViewCell。
答案 2 :(得分:-1)
我也尝试过使用ListView,它给了我同样的问题。
根据您的代码,我看到您在List类中添加了一些Class,但是您没有分配ClassName值,这是有关ListView的示例:
public partial class Page30 : ContentPage
{
public Page30 (int Id)
{
InitializeComponent ();
this.BindingContext = new Term(Id);
}
}
public class Term
{
public List<Class1> classes { get; set; }
public int TermId { get; set; }
public string TermName { get; set; }
public DateTime TermStartDate { get; set; }
public DateTime TermEndDate { get; set; }
public Term(int TermId)
{
this.TermId = TermId;
this.TermName = String.Concat("TermName", TermId);
TermStartDate = new DateTime(2017,7,24);
TermEndDate = new DateTime(2019,01,01);
classes = new List<Class1>()
{
new Class1(){ClassName="class a"},
new Class1(){ClassName="class b"},
new Class1(){ClassName="class c"},
new Class1(){ClassName="class d"},
new Class1(){ClassName="class e"},
new Class1(){ClassName="class f"},
new Class1(){ClassName="class g"},
};
}
}
public class Class1
{
public string ClassName { get; set; }
}