更新OC时,绑定到ObservableCollection.Count不会更新

时间:2012-02-02 07:39:19

标签: silverlight silverlight-toolkit

编辑:如果我从XAML中删除Minimum="1",绑定正常工作......这可能是SL Toolkit问题吗?

我正在尝试将Silverlight Toolkit中NumericUpDown的值绑定到ObservableCollection的Count。

在我的ViewModel的构造函数中,我将项添加到集合中,绑定相应地更新了View。但是,NumericUpDown中的值不会更改(它保持为1)。

有趣的是,如果我在设计器打开并运行IntelliSense时编辑绑定,则值会更新为正确的值(在设计器中)。

我在这里做错了吗?

绑定代码

<toolkit:NumericUpDown x:Name="numberOfCubesUpDown" IsEnabled="True" Maximum="9" Minimum="1" Style="{StaticResource ButtonSpinnerHorizontalStyle}" Value="{Binding Path=Cubes.Count}" Height="30" FontSize="14">
  <i:Interaction.Triggers>
     <i:EventTrigger EventName="ValueChanged">
        <cmd:EventToCommand Command="{Binding ChangeNumberOfCubesCommand}" PassEventArgsToCommand="True"></cmd:EventToCommand>
     </i:EventTrigger>
  </i:Interaction.Triggers>
</toolkit:NumericUpDown>

ViewModel绑定定义 CubeSet实现ObservableCollection

public CubeSet Cubes
    {
        get { return _cubes; }

        set
        {
            if (_cubes == value) { return; }
            _cubes = value;
        }
    }

我在哪里更改CubeSet

        Cubes = new CubeSet();
        for (int i = 0; i < 6; i++) { Cubes.Add(new Cube()); }

1 个答案:

答案 0 :(得分:0)

您的类需要实现INotifyPropertyChanged接口并在setter中引发PropertyChanged事件。

这样的事情:

 using System.ComponentModel;

namespace Sample.ViewModels
{
    public class ViewModelBase : INotifyPropertyChanged
    {
        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

        protected void OnPropertyChanged(string name)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }
    }
}

你的setter / getter就像这样

public CubeSet Cubes
{
    get { return _cubes; }

    set
    {
        if (_cubes == value) { return; }
        _cubes = value;

        OnPropertyChanged("Cubes");
    }
}

如果要更新绑定,则应通过setter方法设置值。当然,您可以在类中的任何位置手动引发OnPropertyChanged事件,并让View检查更新的值。

此外,请确保在绑定上设置模式。我相信默认情况下,它设置为OneWay。

编辑:抱歉,我不知何故忘记了它是一个ObservableCollection。也许你有错误的DataContext。