2013-04-22 51 views
0

我有一个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抛出通知?

+1

SettingsModel是你的类吗?如果是这样,你可能需要实现INotifyPropertyChanged。如果不是,你可能会考虑编写你自己的类(并且通过通知来镜像你需要的属性)。 http://stackoverflow.com/questions/1039505/inotifypropertychanged-wpf – Fise 2013-04-22 13:55:20

+0

@Fly是的,它只是需要从模型发送通知。虽然,我仍然不知道,为什么开关的状态是由他们自己改变的。 – 2013-04-22 14:56:25

回答

2

为了以防万一,其他人也会面临同样的问题,下面是使用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); } 
    } 
}