我对Jinesh's提出了一个非常相似的问题。我需要将组合框的SelectedIndex(或SelectedItem或SelectedValue)的值加到我的ViewModel代码中(即,当用户选择组合框中的项目时,我需要该索引(或项目或值)更新ViewModel代码中的属性)。我已按照Sheridan's answer和Felix C's answer中的建议进行操作,但当所选项目发生更改时,我的属性未获得更新。我正在尝试将新选择的索引值作为“更新”按钮代码的一部分。
查看:
<ComboBox Name="cboMonth"
ItemsSource="{Binding MonthsList, Mode=OneTime}"
DisplayMemberPath="month"
SelectedIndex="{Binding MonthIndex, Mode=TwoWay}"/>
<Button Name="btnUpdate"
Content="Update"
Command="{Binding processUpdateButton}" />
视图模型:
public ObservableCollection<Month> MonthsList { get; set; }
private int _monthIndex;
public int MonthIndex
{
get
{
DateTime today = DateTime.Today;
_monthIndex = today.Month - 1;
return _monthIndex;
}
set
{
if (_monthIndex != value)
{
_monthIndex = value;
RaisePropertyChanged("MonthIndex");
}
}
}
public ICommand processUpdateButton
{
get
{
if (_setUpdateButton == null)
{
_setUpdateButton = new RelayCommand(param => validateOdometer());
}
return _setUpdateButton;
}
}
public void validateOdometer()
{
Console.WriteLine("Validating odometer...");
Console.WriteLine("Month Index: " + (_monthIndex));
}
当我的页面首次呈现时,我将组合框默认为索引5(06-June),并且有问题的属性_monthIndex反映5.当我在组合框中选择新月(例如,10月)时点击我的更新按钮(btnUpdate),_monthIndex应该反映9,但它仍然反映5.为什么?感谢任何/所有帮助。感谢。
答案 0 :(得分:0)
属性getter忽略先前设置的值,始终返回当前月份的索引。
声明应如下所示:
private int monthIndex = DateTime.Today.Month - 1;
public int MonthIndex
{
get { return monthIndex; }
set
{
if (monthIndex != value)
{
monthIndex = value;
RaisePropertyChanged("MonthIndex");
}
}
}