1

我在项目中使用此控件,无法获取属性绑定。

我的xml代码:

   <controls:ExtendedPicker x:Name="myPicker" ItemsSource="{Binding ListaLugaresTrabajo}" DisplayProperty="NombreLugar" SelectedItem="{Binding SelectedLugarTrabajo}" />

我的视图模型代码:

private ObservableCollection<LugarDeTrabajo> _listaLugaresTrabajo;

    public ObservableCollection<LugarDeTrabajo> ListaLugaresTrabajo {
        get {
            return _listaLugaresTrabajo;
        }
        set {
            _listaLugaresTrabajo = value;
            RaisePropertyChanged (() => ListaLugaresTrabajo);
        }
    }

    private LugarDeTrabajo _selectedLugarTrabajo;

    public LugarDeTrabajo SelectedLugarTrabajo {
        get {
            return _selectedLugarTrabajo;
        }
        set {
            _selectedLugarTrabajo = value;
            RaisePropertyChanged (() => SelectedLugarTrabajo);
        }
    }

我的模型代码(也使用 sqlite):

[Table ("LugaresDeTrabajo")]
public class LugarDeTrabajo
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    [Unique]
    public string NombreLugar { get; set; }
}

ItemsSource 和 DisplayProperty 工作正常,但 SelectedItem 始终为空。

我使用 MvvmCross 框架,在应用程序的其余部分工作正常。

这是一个共享项目,我正在试用 Android 版本。

那可能会发生吗?

解决方案:将 SelectedItem 属性设置为双向绑定模式。

正确的 Xaml 代码:

<controls:ExtendedPicker x:Name="myPicker" ItemsSource="{Binding ListaLugaresTrabajo}" DisplayProperty="NombreLugar" SelectedItem="{Binding SelectedLugarTrabajo, Mode=TwoWay}" />
4

2 回答 2

3

根据ExtendedPicker 源代码 SelectedItem可绑定属性已作为默认绑定模式设置为OneWay. 这意味着 ViewModel 的变化会反映在 View 中,而不是相反的方向。

如果您需要将更改从 ViewModel 传播到 View,反之亦然,请SelectedItem按以下方式设置属性:

SelectedItem="{Binding SelectedLugarTrabajo, Mode=TwoWay}" 

如果您只想通过SelectedItem以下方式将更改从 View 传播到 ViewModel 集:

SelectedItem="{Binding SelectedLugarTrabajo, Mode=OneWayToSource}" 
于 2016-03-13T11:39:52.383 回答
0

您也可以依靠该SelectedIndexChanged物业。这是一个例子:

<controls:ExtendedPicker x:Name="myPicker" ItemsSource="{Binding ListaLugaresTrabajo}" DisplayProperty="NombreLugar"  SelectedIndexChanged="OnLugarChange"/>

    async void OnLugarChange(object sender, System.EventArgs e)
    {
        if (myPicker.SelectedIndex != -1)
        {
            _selectedLugarTrabajo = myPicker.SelectedItem as LugarDeTrabajo;
        }
     }
于 2017-05-14T21:10:24.887 回答