我將可觀察集合綁定到數據網格。通過異步調用從服務器獲取集合。集合模型包含一個名爲'BackgroundBrush'的類型爲'System.Windows.Media.Brush'的屬性,該屬性綁定到數據網格中模板列的背景顏色。 brush屬性可以是SolidColorBrush或LinearGradientBrush,取決於應用於該屬性的業務邏輯。類型爲Brush的綁定屬性在異步調用時拋出異常
將數據呈現到數據網格時,應用程序會拋出一個像這樣的異常「必須在DependencyObject的同一線程上創建DependencySource」。在調試問題
的問題是 '背景' 屬性
事發現。註釋掉這個屬性綁定並使異步調用可以正常工作。
使服務調用同步工作正常,但我需要這是一個異步的。
請在Application.Current.Dispatcher.Invoke服務調用沒有任何區別
下面的示例應用程序代碼
型號
public class Model
{
public string Name { get; set; }
public string Email { get; set; }
public string Address { get; set; }
public Brush BackgroundBrush { get; set; }
}
視圖模型
private ObservableCollection<Model> _dataCollection;
public ObservableCollection<Model> DataCollection
{
get { return _dataCollection; }
set
{
_dataCollection = value;
RaisePropertyChanged(() => DataCollection);
}
}
public RelayCommand LoadCommand { get; private set; }
private async Task LoadData()
{
var list = await Task.Run(() => GetData());
DataCollection = new ObservableCollection<Model>(list);
}
private ObservableCollection<Model> GetData()
{
return new ObservableCollection<Model>()
{
new Model()
{
Address = "a",
Email = "2",
Name = "3",
BackgroundBrush = new SolidColorBrush(Colors.SaddleBrown)
}
};
}
查看
<Grid x:Name="LayoutGrid">
<DataGrid ItemsSource="{Binding DataCollection}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding BackgroundBrush}">
<TextBlock Text="{Binding Name}"></TextBlock>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
不要發佈您的代碼爲圖像。改用恰當的代碼塊。 – Clemens 2015-02-11 11:04:11
@Clemens - 完成:) – Dennis 2015-02-11 11:08:07