我有一个模特:
public class GYPushpin : GYEntity
{
private GeoCoordinate _coordinate;
public GeoCoordinate Coordinate
{
get
{
return _coordinate;
}
set
{
if (value != _coordinate)
{
_coordinate = value;
NotifyPropertyChanged("Coordinate");
}
}
}
//.............
}
和MapItemsControl
:
<toolkit:MapItemsControl>
<toolkit:MapItemsControl.ItemTemplate>
<DataTemplate>
<toolkit:Pushpin
GeoCoordinate="{Binding Coordinate}"
Background="{Binding Background}"
Content="{Binding ContentPushpin}"
Tag="{Binding Tag}"
Tap="userPushpin_Tap">
</toolkit:Pushpin>
</DataTemplate>
</toolkit:MapItemsControl.ItemTemplate>
</toolkit:MapItemsControl>
我在UI线程中使用DataBinding并填充List:
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
foreach (GYUser friend in friends)
{
ImageBrush image = new ImageBrush()
{
ImageSource = new System.Windows.Media.Imaging.BitmapImage(new Uri("http://my_url" + string.Format(friend.Avatar)))
};
Brush markerColor = friend.Sex == 1 ? new SolidColorBrush(Color.FromArgb(alpha, 71, 188, 225)) : new SolidColorBrush(Color.FromArgb(alpha, 246, 109, 128));
var content = new System.Windows.Shapes.Rectangle()
{
Fill = image,
StrokeThickness = 10,
Height = 50,
Width = 50
};
var pin = new GYPushpin()
{
Coordinate = new GeoCoordinate()
{
Longitude = friend.Longitude,
Latitude = friend.Latitude,
},
ContentPushpin = content,
Background = markerColor,
};
//add pin in binding collection
}
}
我有很多用户,我必须在UI线程中工作,因为我使用ImageBrush
,Shapes
等。我可以在后台工作吗?我的意思是以另一种方式绑定内容和背景属性。毕竟,MVVM应该允许在UI的后台工作。
答案 0 :(得分:1)
您不应该在代码中创建元素,而是在xaml模板中创建它们。绑定到模型中的属性(在这种情况下,它将是Friend类。
<DataTemplate>
<toolkit:Pushpin
GeoCoordinate="{Binding Coordinate}"
Background="Blue"
Tag="{Binding Tag}"
Tap="userPushpin_Tap">
<i:Interaction.Triggers>
<ec:DataTrigger Binding="{Binding Sex}" Value="1">
<ec:ChangePropertyAction PropertyName="Background">
<ec:ChangePropertyAction.Value>
<SolidColorBrush Color="Red"/>
</ec:ChangePropertyAction.Value>
</ec:ChangePropertyAction>
</ec:DataTrigger>
</i:Interaction.Triggers>
<Image Height="50" Width="50" Source="{Binding Avatar}"/>
</toolkit:Pushpin>
</DataTemplate>
使用此示例,您不需要特殊的GYPushpin,只需要Friend类。在这个例子中,你的朋友类需要有一个完整的图像URL,并且需要一个GeoCoordinate。
此示例使用表达式sdk。您需要将以下命名空间添加到您的xaml
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:ec="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"