我有一个 Xamarin.Forms xaml 页面,其中使用 ListView 允许用户从列表中选择单个项目。我已将 ListView 的 SelectedItem 属性绑定到 ViewModel 上的属性,效果很好。一旦用户更改所选项目,我的视图模型中的属性也会更新。
但是,即使我最初将 ViewModel 中的属性设置为列表中的值之一,当页面加载时,ListView 的 SelectedItem 属性为 null,这反过来又将 ViewModel 属性设置为 null。
我需要的是另一个方向,我希望 ListView 最初选择我在 VM 属性中设置的项目。
我可以通过在代码隐藏文件中编写额外的代码来显式设置初始选定项来组合解决方案,但这会引入额外的属性和复杂性,并且非常难看。
设置 ListView 的初始选定项(其选定项绑定到 viewmodel 属性)的正确方法是什么?
-EDIT-
我被要求提供用于绑定的代码。
这非常简单、标准:
<ListView x:Name="myList" ItemsSource="{Binding Documents}" SelectedItem="{Binding SelectedDocument}">
设置为列表视图绑定上下文的视图模型被实例化before页面已创建,如下所示:
public class DocumentSelectViewModel : ViewModelBase
{
private Document selectedDocument;
public List<Document> Documents
{
get { return CachedData.DocumentList; }
}
public Document SelectedDocument
{
get { return selectedDocument; }
set { SetProperty(ref selectedDocument, value);
}
public DocumentSelectViewModel()
{
SelectedDocuement = CachedData.DocumentList.FirstOrDefault();
}
}
SetProperty 是一个函数,如果新值与旧值不同(经典绑定代码),它会简单地触发 INotifyPropertyChanged 事件。
我对 XAML 有点生疏,但是您不需要进行双向绑定吗?
E.G.
{ Binding SelectedDocument, Mode=TwoWay }
只要 SelectedDocument 属性更改引发 INotifyPropertyChanged 事件,您就应该获得所需的效果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)