WPF / MVVM:当Combobox选择更改

时间:2015-06-29 19:49:47

标签: wpf mvvm

我对Jinesh's提出了一个非常相似的问题。我需要将组合框的SelectedIndex(或SelectedItem或SelectedValue)的值加到我的ViewModel代码中(即,当用户选择组合框中的项目时,我需要该索引(或项目或值)更新ViewModel代码中的属性)。我已按照Sheridan's answerFelix 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.为什么?感谢任何/所有帮助。感谢。

1 个答案:

答案 0 :(得分:0)

属性getter忽略先前设置的值,始终返回当前月份的索引。

声明应如下所示:

private int monthIndex = DateTime.Today.Month - 1;

public int MonthIndex
{
    get { return monthIndex; }
    set
    {
        if (monthIndex != value)
        {
            monthIndex = value;
            RaisePropertyChanged("MonthIndex");
        }
    }
}