带有开关或可观察字典的ListBox

时间:2013-04-22 13:33:21

标签: c# windows-phone-7 mvvm-light

我有一个ObservableCollection SettingsModel有一个字符串和bool。现在我正在设置设置页面,包含开关列表框。

<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 个答案:

答案 0 :(得分:2)

以防万一,其他任何人都会遇到同样的问题,这是样本,使用mvvm light。

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); }
    }
}