У меня возникают проблемы с зависанием интерфейса Silverlight (и даже браузера) при привязке / рендеринге данных.Я был в состоянии воспроизвести проблему с кодом ниже, который использует 4 сетки.На практике мы будем использовать более 4 сеток.
Я обнаружил, что если у меня есть только одна сетка и много строк (например, 3000), все в порядке.
Похоже,существует конфликт между четырьмя сетями данных, когда они пытаются связать / визуализировать, что приводит к блокировке пользовательского интерфейса.
Это известная проблема с silverlight?Какие обходные пути существуют?
Код для воспроизведения проблемы
Объект данных:
public class DataObject
{
public string Column0 { get; set; }
public string Column1 { get; set; }
public string Column2 { get; set; }
...
public string Column30 { get; set; }
public DataObject()
{
Random r = new Random(DateTime.Now.Millisecond);
Column0 = r.Next(1000).ToString();
Column1 = r.Next(1000).ToString();
Column2 = r.Next(1000).ToString();
...
Column30 = r.Next(1000).ToString();
}
}
Код позади:
public partial class MainPage : UserControl
{
private ObservableCollection<DataObject> _data = new ObservableCollection<DataObject>();
public MainPage()
{
InitializeComponent();
PopulateData();
DataContext = _data;
}
private void PopulateData()
{
for (int i = 0; i < 300; i++)
{
_data.Add(new DataObject());
}
}
public ObservableCollection<DataObject> Data
{
get { return _data; }
set { _data = value; }
}
}
XAML:
<UserControl x:Class="SilverlightGridTest.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sdk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data">
<Grid x:Name="LayoutRoot" Background="White">
<ScrollViewer>
<StackPanel>
<sdk:DataGrid Grid.Row="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding}"
Width="800"
Height="700"
AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Column0, Mode=TwoWay}" IsReadOnly="True" />
<sdk:DataGridTextColumn Binding="{Binding Column1, Mode=TwoWay}" IsReadOnly="True" />
<sdk:DataGridTextColumn Binding="{Binding Column2, Mode=TwoWay}" IsReadOnly="True" />
...
<sdk:DataGridTextColumn Binding="{Binding Column30, Mode=TwoWay}" IsReadOnly="True" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
<sdk:DataGrid Grid.Row="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding}"
Width="800"
Height="700"
AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Column0, Mode=TwoWay}" IsReadOnly="True" />
<sdk:DataGridTextColumn Binding="{Binding Column1, Mode=TwoWay}" IsReadOnly="True" />
<sdk:DataGridTextColumn Binding="{Binding Column2, Mode=TwoWay}" IsReadOnly="True" />
...
<sdk:DataGridTextColumn Binding="{Binding Column30, Mode=TwoWay}" IsReadOnly="True" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
<sdk:DataGrid Grid.Row="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding}"
Width="800"
Height="700"
AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Column0, Mode=TwoWay}" IsReadOnly="True" />
<sdk:DataGridTextColumn Binding="{Binding Column1, Mode=TwoWay}" IsReadOnly="True" />
<sdk:DataGridTextColumn Binding="{Binding Column2, Mode=TwoWay}" IsReadOnly="True" />
...
<sdk:DataGridTextColumn Binding="{Binding Column30, Mode=TwoWay}" IsReadOnly="True" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
<sdk:DataGrid Grid.Row="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding}"
Width="800"
Height="700"
AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Column0, Mode=TwoWay}" IsReadOnly="True" />
<sdk:DataGridTextColumn Binding="{Binding Column1, Mode=TwoWay}" IsReadOnly="True" />
<sdk:DataGridTextColumn Binding="{Binding Column2, Mode=TwoWay}" IsReadOnly="True" />
...
<sdk:DataGridTextColumn Binding="{Binding Column30, Mode=TwoWay}" IsReadOnly="True" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</StackPanel>
</ScrollViewer>
</Grid>