【问题标题】:WPF/MVVM: SelectedIndex Binding Property not updating when Combobox Selection ChangedWPF/MVVM:当组合框选择更改时,SelectedIndex 绑定属性未更新
【发布时间】:2015-06-29 19:49:46
【问题描述】:

我有一个与Jinesh's 非常相似的问题。我需要在我的 ViewModel 代码中获取组合框的 SelectedIndex(或 SelectedItem 或 SelectedValue)的 (即,当用户在组合框中选择一个项目时,我需要该索引(或项目或值)来更新 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(6 月 6 日),而有问题的属性 _monthIndex 反映了 5。当我在组合框中选择一个新月份时(例如,10 月)然后单击我的更新按钮 (btnUpdate),_monthIndex 应该反映 9,但仍反映 5。为什么?感谢任何/所有帮助。谢谢。

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    属性getter忽略之前设置的值,总是返回当前月份的索引。

    声明应如下所示:

    private int monthIndex = DateTime.Today.Month - 1;
    
    public int MonthIndex
    {
        get { return monthIndex; }
        set
        {
            if (monthIndex != value)
            {
                monthIndex = value;
                RaisePropertyChanged("MonthIndex");
            }
        }
    } 
    

    【讨论】:

    • 就是这样!作品!谢谢!
    • 跟随 Q。我需要对 dayIndex var(对于我的 Day 组合框)做同样的事情,但 dayIndex 是计算出来的 - 它不是一个声明,因为上面的 monthIndex。每个日历日可以有 0 个或多个事件。例如,如果今天(6/30)有三个事件,那么这些事件将存储为 30、30.1 和 30.2(在 ObservableCollection 中),并且每个事件都有一个对应的索引。我目前有一个方法可以返回所需的索引,在我的 XAML (SelectedIndex="{Binding DayIndex}") 中设置它并正确显示 Day.Event。如何处理 dayIndex 的声明?谢谢。
    • 请不要在cmets中追问。而是发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2012-09-25
    相关资源
    最近更新 更多