双向绑定根本不更新数据源

本文关键字:更新 数据源 绑定 | 更新日期: 2023-09-27 18:09:58

我正在创建一个windows 8.1手机应用程序,我有来自web服务的数据,这是一个网格的数据源。我遇到的问题是,当我点击其中一个复选框时,它是两个绑定,所以IsChecked属性应该得到更新,但它不是。当我访问数据源时,它在第一次加载网格时给我相同的数据,复选框保持选中状态。下面是xaml代码,下面是加载数据源的代码。我做错了什么?

<ScrollViewer Grid.ColumnSpan="5" Grid.Row="3" Height="330" x:Name="scrollControl">
                <ItemsControl Name="lstTop10Picks">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid Margin="6" Name="gridTop11Stocks">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="2*" />
                                    <ColumnDefinition Width="2*" />
                                    <ColumnDefinition Width="2*" />
                                </Grid.ColumnDefinitions>
                                <CheckBox Style="{StaticResource CheckStyle}" IsChecked="{Binding IsChecked, Mode=TwoWay}" Grid.Column="0" Grid.Row="3">
                                    <CheckBox.RenderTransform>
                                        <ScaleTransform ScaleX="0.5" ScaleY="0.5" />
                                    </CheckBox.RenderTransform>
                                </CheckBox>
                                <TextBlock Style="{StaticResource NumberStyle}" Grid.Column="1" Grid.Row="3" Text="{Binding Id}" />
                                <TextBlock Style="{StaticResource SummaryStyle}" Grid.Column="2" Grid.Row="3" Text="{Binding Symbol}" HorizontalAlignment="Left" />
                                <TextBlock Style="{StaticResource SummaryStyle}" Grid.Column="3" Grid.Row="3" Text="{Binding Market}" />
                                <TextBlock Style="{StaticResource SummaryStyle}" Grid.Column="4" Grid.Row="3" Text="{Binding Return}" />
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </ScrollViewer>
var stocks = doc.Element(ns + "ArrayOfStockRating").Elements(ns + "StockRating")
        .Select(n => new
        {
            Id = count += 1,
            Symbol = n.Element(ns + "Symbol").Value,
            Market = n.Element(ns + "Market").Value,
            Return = n.Element(ns + "ShortRating").Value,
            IsChecked = false
        })
        .ToList();
lstTop10Picks.ItemsSource = stocks;

双向绑定根本不更新数据源

c#中的匿名类型是不可变的。这意味着它们一旦被创建就不能被更改。为了使双向绑定工作,你需要声明自己的可变类型。

类似:

public class StockViewModel
{
    public int Id { get; set; }
    public string Symbol { get; set; }
    public string Market { get; set; }
    public string Rating { get; set; }
    public bool IsChecked { get; set; }
}

然后构建您的源集合:

var stocks = doc.Element(ns + "ArrayOfStockRating").Elements(ns + "StockRating")
    .Select((n, index) => new StockViewModel
    {
        Id = index + 1,
        Symbol = n.Element(ns + "Symbol").Value,
        Market = n.Element(ns + "Market").Value,
        Return = n.Element(ns + "ShortRating").Value,
        IsChecked = false
    }).ToList();

请注意,我删除了LINQ查询中的副作用,因为这只是糟糕的形式。

你必须使用Property来绑定

 public string MyProperty { get; set; }

如果你用过

 public string MyProperty