Xaml 在绑定到ListView的SelectedItem属性时设置初始选定项

Xaml 在绑定到ListView的SelectedItem属性时设置初始选定项,xaml,listview,binding,xamarin.forms,Xaml,Listview,Binding,Xamarin.forms,我有一个Xamarin.Forms xaml页面,其中我使用ListView允许用户从列表中选择单个项目。我已经将ListView的SelectedItem属性绑定到我的ViewModel上的一个属性,这可以正常工作。一旦用户更改所选项目,“我的视图模型”中的属性也将更新 但是,即使我最初将ViewModel中的属性设置为列表中的一个值,当页面加载时,ListView的SelectedItem属性为null,这反过来又将ViewModel属性设置为null。 我需要的是另一个方向,我希望List

我有一个Xamarin.Forms xaml页面,其中我使用ListView允许用户从列表中选择单个项目。我已经将ListView的SelectedItem属性绑定到我的ViewModel上的一个属性,这可以正常工作。一旦用户更改所选项目,“我的视图模型”中的属性也将更新

但是,即使我最初将ViewModel中的属性设置为列表中的一个值,当页面加载时,ListView的SelectedItem属性为null,这反过来又将ViewModel属性设置为null。 我需要的是另一个方向,我希望ListView最初选择我在VM属性中设置的项

我可以通过在代码隐藏文件中编写额外的代码来明确设置初始选定项,从而拼凑出一个解决方案,但这会引入额外的属性和复杂性,而且非常难看

设置ListView的初始选定项的正确方法是什么?选定项绑定到viewmodel属性的用户是谁

-编辑-

我被要求提供用于绑定的代码。 它非常简单,标准:

<ListView x:Name="myList" ItemsSource="{Binding Documents}" SelectedItem="{Binding SelectedDocument}">
设置为listview绑定上下文的视图模型在创建页面之前实例化,如下所示:

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有点生疏,但您不需要使绑定双向吗

例如

只要SelectedDocument属性更改引发INotifyPropertyChanged事件,您就应该获得所需的效果。

如果替换

public DocumentSelectViewModel()
{
    SelectedDocument = CachedData.DocumentList.FirstOrDefault();
}

对你有用吗?
我有一个类似的问题,通过这种方式解决了…

您需要发布用于绑定的代码。我发布了代码。正如我提到的,它只是一个简单的数据绑定,没有什么不同寻常的。这就是我最初没有给出任何代码的原因。我只是想知道如何设置双向绑定的默认值。现在,默认值总是控件的默认值,我需要另一种方法,保持视图模型属性默认值并将其应用于控件…SelectedItem的默认绑定模式已经是双向的。唯一的问题是当绑定启动时,listview的空选定项会覆盖viewmodels填充项。初始化后,绑定以两种方式工作。单击列表中的UI会更改属性,而从代码中设置属性会更改listview,只需要一种方法让属性中的默认值在初始绑定时保持不变。它被覆盖为listview的默认null
public DocumentSelectViewModel()
{
    SelectedDocument = CachedData.DocumentList.FirstOrDefault();
}
public DocumentSelectViewModel()
{
    SelectedDocument = Documents.FirstOrDefault();
}