ListBox开关或可观察字典
问题描述:
我有一个ObservableCollection的SettingsModel有一个字符串和布尔。现在我正在设置页面,并带有开关列表框。ListBox开关或可观察字典
<Grid>
<ListBox
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Margin="0,0,0,0"
ItemsSource="{Binding Path=SettingsItems, Mode=TwoWay}"
ItemContainerStyle="{StaticResource ListBoxItemsStrerchedStyle}" >
<ListBox.ItemTemplate>
<DataTemplate>
<toolkit:ToggleSwitch
Header="{Binding kind}"
Content="{Binding value}"
IsChecked="{Binding value, Mode=TwoWay}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
问题是,当用户改变交换机的状态,它不是上升通知(内容没有改变)。此外,如果向下滚动列表(约30项),然后向上滚动,某些开关正在改变其状态。
我应该使用ObservableDictionary(这看起来相当陈旧),或者让SettingsModel抛出通知?
答
为了以防万一,其他人也会面临同样的问题,下面是使用mvvm指示灯的示例。
public class SettingsModel : ViewModelBase
{
private bool _value;
public bool Value
{
get { return _value; }
set { Set(() => Value, ref _value, value); }
}
private string _kind;
public string Kind
{
get { return _kind; }
set { Set(() => Kind, ref _kind, value); }
}
}
SettingsModel是你的类吗?如果是这样,你可能需要实现INotifyPropertyChanged。如果不是,你可能会考虑编写你自己的类(并且通过通知来镜像你需要的属性)。 http://stackoverflow.com/questions/1039505/inotifypropertychanged-wpf – Fise 2013-04-22 13:55:20
@Fly是的,它只是需要从模型发送通知。虽然,我仍然不知道,为什么开关的状态是由他们自己改变的。 – 2013-04-22 14:56:25