Xlabs ExtendedPicker SelectedItem 属性 未绑定
Xlabs ExtendedPicker SelectedItem Property not binding
我在项目中使用此控件,但无法获得 属性 绑定。
我的xaml代码:
<controls:ExtendedPicker x:Name="myPicker" ItemsSource="{Binding ListaLugaresTrabajo}" DisplayProperty="NombreLugar" SelectedItem="{Binding SelectedLugarTrabajo}" />
我的 ViewModel 代码:
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 和 Display属性 工作正常但 SelectedItem 始终为 null。
我使用 MvvmCross 框架,在应用程序的其余部分工作正常。
这是一个共享项目,我正在试用 Android 版本。
这可能会发生吗?
解决方法:
将 SelectedItem 属性 设置为双向绑定模式。
正确的Xaml代码:
<controls:ExtendedPicker x:Name="myPicker" ItemsSource="{Binding ListaLugaresTrabajo}" DisplayProperty="NombreLugar" SelectedItem="{Binding SelectedLugarTrabajo, Mode=TwoWay}" />
根据 ExtendedPicker source code SelectedItem
可绑定 属性 已将默认绑定模式设置为 OneWay
。这意味着 ViewModel 中的更改会反映在 View 中,但不会反映在相反的方向。
如果您需要将更改从 ViewModel 传播到 View,反之亦然,请按以下方式设置 SelectedItem
属性:
SelectedItem="{Binding SelectedLugarTrabajo, Mode=TwoWay}"
如果您只想将更改从 View 传播到 ViewModel,请按以下方式设置 SelectedItem
:
SelectedItem="{Binding SelectedLugarTrabajo, Mode=OneWayToSource}"
你也可以靠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;
}
}
我在项目中使用此控件,但无法获得 属性 绑定。
我的xaml代码:
<controls:ExtendedPicker x:Name="myPicker" ItemsSource="{Binding ListaLugaresTrabajo}" DisplayProperty="NombreLugar" SelectedItem="{Binding SelectedLugarTrabajo}" />
我的 ViewModel 代码:
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 和 Display属性 工作正常但 SelectedItem 始终为 null。
我使用 MvvmCross 框架,在应用程序的其余部分工作正常。
这是一个共享项目,我正在试用 Android 版本。
这可能会发生吗?
解决方法: 将 SelectedItem 属性 设置为双向绑定模式。
正确的Xaml代码:
<controls:ExtendedPicker x:Name="myPicker" ItemsSource="{Binding ListaLugaresTrabajo}" DisplayProperty="NombreLugar" SelectedItem="{Binding SelectedLugarTrabajo, Mode=TwoWay}" />
根据 ExtendedPicker source code SelectedItem
可绑定 属性 已将默认绑定模式设置为 OneWay
。这意味着 ViewModel 中的更改会反映在 View 中,但不会反映在相反的方向。
如果您需要将更改从 ViewModel 传播到 View,反之亦然,请按以下方式设置 SelectedItem
属性:
SelectedItem="{Binding SelectedLugarTrabajo, Mode=TwoWay}"
如果您只想将更改从 View 传播到 ViewModel,请按以下方式设置 SelectedItem
:
SelectedItem="{Binding SelectedLugarTrabajo, Mode=OneWayToSource}"
你也可以靠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;
}
}