我正在创建一个Windows 8.1手机应用程序,我有一个来自webservice的数据,这是网格的数据源。我遇到的问题是,当我点击其中一个复选框时,它是一个两个绑定,因此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;
答案 0 :(得分:1)
您必须使用Property进行绑定,例如
public string MyProperty { get; set; }
如果你已经使用过
public string MyProperty
然后它将无法工作。
答案 1 :(得分:1)
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查询中的副作用,因为这只是一种不好的形式。