Xaml 自定义contentview中Listview的数据绑定
我正在尝试创建一个包含listview表单的contentview。 我想设置contentview的一个属性,然后使用该属性将数据绑定到listview 不幸的是,我无法填充它。 为了得到一个poc,我分解了这个例子。所需的结果应该是包含所有名称的contentpage。 谢谢你的帮助。提前谢谢 该示例包括: Contentpage: 添加contentview。 它还有一个到viewmodel-CompanyVM的bindingcontext。 将contentview的属性PersonList设置为PersonVM.PersonList。(不确定是否正确) Contentview.XAML: contentview的XAML listview的绑定(不确定是否正确) Contentview.cs XAML代码隐藏 contentview的属性设置 公司MM: 使用的视图模型 公司、人员和模型 简单分类与之一起工作 例子 ContentMainPageXaml 自定义contentview中Listview的数据绑定,xaml,listview,xamarin,xamarin.forms,Xaml,Listview,Xamarin,Xamarin.forms,我正在尝试创建一个包含listview表单的contentview。 我想设置contentview的一个属性,然后使用该属性将数据绑定到listview 不幸的是,我无法填充它。 为了得到一个poc,我分解了这个例子。所需的结果应该是包含所有名称的contentpage。 谢谢你的帮助。提前谢谢 该示例包括: Contentpage: 添加contentview。 它还有一个到viewmodel-CompanyVM的bindingcontext。 将contentview的属性PersonLi
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:cv="clr-namespace:ContentViewExample.XAML"
xmlns:vm="clr-namespace:ContentViewExample.ViewModel"
xmlns:local="clr-namespace:ContentViewExample"
x:Class="ContentViewExample.MainPage"
x:Name="mainpage">
<ContentPage.BindingContext>
<vm:CompanyVM/>
</ContentPage.BindingContext>
<StackLayout>
<cv:personlistCV Company="{x:Reference mainpage }"/>
<!--Is this correct?-->
</StackLayout>
</ContentPage>
CompanyVM
namespace ContentViewExample.ViewModel
{
public class CompanyVM: ViewModelBase
{
ObservableCollection<Person> persons;
string companyname;
public CompanyVM()
{
companyname = "Test Company";
persons = new ObservableCollection<Person>();
foreach (Person item in MockData.GetPeople())
persons.Add(item);
}
public string Company
{
set { SetProperty(ref companyname, value); }
get { return companyname; }
}
public ObservableCollection<Person> Persons
{
set { SetProperty(ref persons, value); }
get { return persons; }
}
}
}
namespace ContentViewExample.ViewModel
{
公共类CompanyVM:ViewModelBase
{
可观察的集合人员;
字符串公司名称;
上市公司
{
companyname=“测试公司”;
人员=新的可观察集合();
foreach(MockData.GetPeople()中的Person项)
增加(项目);
}
公共字符串公司
{
set{SetProperty(ref companyname,value);}
获取{return companyname;}
}
公众人士
{
set{SetProperty(ref persons,value);}
获取{返回人员;}
}
}
}
公司和个人
public class Company
{
public string Name { get; set; }
}
public class Person
{
public string Name{get;set;}
}
public static class MockData
{
public static List<Person> GetPeople()
{
List<Person> tmp = new List<Person>
{
new Person
{
Name="Ted"
},
new Person
{
Name="Jennifer"
},
new Person
{
Name="Andy"
},
new Person
{
Name="Oscar"
}
};
return tmp;
}
}
上市公司
{
公共字符串名称{get;set;}
}
公共阶层人士
{
公共字符串名称{get;set;}
}
公共静态类数据
{
公共静态列表GetPeople()
{
列表tmp=新列表
{
新人
{
Name=“Ted”
},
新人
{
Name=“詹妮弗”
},
新人
{
Name=“安迪”
},
新人
{
Name=“奥斯卡”
}
};
返回tmp;
}
}
您已尝试通过以下方式绑定personlistCV.Company
<StackLayout>
<cv:personlistCV Company="{x:Reference mainpage }"/>
<!--Is this correct?-->
</StackLayout>
也许吧
<cv:personlistCV Company="{Binding .}"/>
在Contentview.XAMLhi@Arvindraja中尝试将
ItemsSource=“{Binding Company.Persons}”>
转换为ItemsSource=“{Binding Persons}”>
这一点-谢谢你的提示。@G.hakim如果这是真的,你应该发表评论,让我来编辑答案。虽然修正答案或改进格式的更改是完全可以接受的,我认为修改答案的内容应该留给答案的原始作者。正如@G.hakim所指出的:有一个从List
到observateCollection
的直接转换,因此,填充模拟数据的每个循环都可以是一行代码,类似这样:persons=newObservableCollection(MockData.GetPeople())代码>嗨@Paul Kertscher谢谢你的帮助。->很抱歉,如果这个例子没有多大意义,但是您详细的回答帮助了我,因为我对xaml非常陌生。1.理解x:References
实际引用:)2。在绑定中使用Source
,显式设置绑定源。3. {Binding.}
用作视图Bindingreference的缩写。@jan.michael很高兴我能帮忙:)
<StackLayout>
<cv:personlistCV Company="{x:Reference mainpage }"/>
<!--Is this correct?-->
</StackLayout>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:cv="clr-namespace:ContentViewExample.XAML"
xmlns:vm="clr-namespace:ContentViewExample.ViewModel"
xmlns:local="clr-namespace:ContentViewExample"
x:Class="ContentViewExample.MainPage"
x:Name="mainpage">
<ContentPage.BindingContext>
<vm:CompanyVM/>
</ContentPage.BindingContext>
<StackLayout>
<cv:personlistCV Company="{Binding Path=BindingContext, Source={x:Reference mainpage}}"/> <!-- Bind the element to `mainpage.BindingContext` -->
</StackLayout>
</ContentPage>
<cv:personlistCV Company="{Binding .}"/>
public partial class personlistCV : ContentView
{
public personlistCV ()
{
InitializeComponent ();
}
//CompanyProperty
public static readonly BindableProperty CompanyProperty =
BindableProperty.Create(
"Company",
typeof(CompanyVM),
typeof(personlistCV),
null);
public CompanyVM Company
{
set { SetValue(CompanyProperty, value); }
get { return (personlistCV)GetValue(CompanyProperty); }
}
}