MapItemsControl图钉中的绑定属性内容,背景等

时间:2013-07-19 13:05:59

标签: windows-phone-7 xaml data-binding windows-phone-8

我有一个模特:

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线程中工作,因为我使用ImageBrushShapes等。我可以在后台工作吗?我的意思是以另一种方式绑定内容和背景属性。毕竟,MVVM应该允许在UI的后台工作。

1 个答案:

答案 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"