编辑:如果我从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()); }
答案 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。