0

我有一个设置模型的 ObservableCollection 有一个字符串和布尔值。现在我正在制作带有开关列表框的设置页面。

<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 以某种方式抛出通知?

4

1 回答 1

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); }
    }
}
于 2013-04-22T14:55:33.257 回答