オブジェクトの配列内のXAMLバインディングオブジェクト

ポール・ヴィノグラドフ

XAMLMapControlへのカスタムルートを実装しようとしています。このルートには、選択可能で移動可能なポイント(サンプルマップポイント)とそれらを接続するポリラインがあり、可視性プロパティを介してオン/オフを切り替えることができます。ルートクラスと、それに送信するルートクラスからポリラインとポイントの両方を生成するカスタムユーザーコントロールがあります。ルートの配列を介してルートオブジェクトを送信します。問題は、実際にデータをフェッチしてポイントとポリラインをレンダリングするために取得できないことです。これが私のRouteControl.XAMLです

<UserControl x:Class="Map_Test.RouteControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:map="clr-namespace:MapControl;assembly=MapControl.WPF">
<UserControl.Resources>
<Style x:Key="PointItemStyle" TargetType="map:MapItem" >
        <Setter Property="map:MapPanel.Location" Value="{Binding Location}"/>
        <Setter Property="Foreground" Value="Black"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="map:MapItem">
                <Canvas>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="Disabled"/>
                            <VisualState x:Name="MouseOver">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="labelBackground" Storyboard.TargetProperty="Opacity" To="0.7" Duration="0:0:0.1"/>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualState x:Name="Unselected"/>
                            <VisualState x:Name="Selected">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="selectedPath" Storyboard.TargetProperty="Opacity" To="0.7" Duration="0:0:0.1"/>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Path x:Name="selectedPath" Fill="White" Opacity="0">
                        <Path.Data>
                            <EllipseGeometry RadiusX="15" RadiusY="15"/>
                        </Path.Data>
                    </Path>
                    <Path StrokeThickness="2" Fill="Transparent">
                        <Path.Stroke>
                            <SolidColorBrush Color="Gray"/>
                        </Path.Stroke>
                        <Path.Data>
                            <EllipseGeometry RadiusX="8" RadiusY="8"/>
                        </Path.Data>
                    </Path>
                    <Grid Canvas.Left="15" Canvas.Top="-8">
                        <Rectangle x:Name="labelBackground" Fill="White" Opacity="0"/>
                        <!--local:OutlinedText Margin="1" OutlineThickness="1.5" Text="{Binding Name}"/-->
                    </Grid>
                </Canvas>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Panel.ZIndex" Value="1"/>
        </Trigger>
    </Style.Triggers>
</Style>
</UserControl.Resources>
<map:MapPanel>
    <map:MapPolyline Locations="{Binding Locations, RelativeSource={RelativeSource AncestorType=UserControl}}"
                     Stroke="{Binding Foreground, RelativeSource={RelativeSource AncestorType=UserControl}}"
                     StrokeThickness="3"/>
    <map:MapItemsControl ItemsSource="{Binding Points}"
                             ItemContainerStyle="{StaticResource PointItemStyle}"
                             IsSynchronizedWithCurrentItem="True"
                             SelectionMode="Extended"
                             MouseLeftButtonDown="PathMouseLeftButtonDown"
                             MouseLeftButtonUp="PathMouseLeftButtonUp"
                             MouseMove="PathMouseMove"/>       
</map:MapPanel>

私のルートクラス

    public class RoutePoint : PropertyChangedBase
{
    private Location location;
    public Location Location
    {
        get { return location; }
        set
        {
            location = value;
            NotifyOfPropertyChange(() => location);
        }
    }
}

public class Route : PropertyChangedBase
{
    public ObservableCollection<RoutePoint> Points { get; set; }
    public BindableCollection<Location> Locations{ get; set; }
    public bool Visible { get; set; }
    public Route()
    {
        Locations = new BindableCollection<Location>();
        Points = new ObservableCollection<RoutePoint>();
        Visible = true;
        Location = new Location();
    }
}

}

このようなオブジェクトを作成します

<DataTemplate x:Key="RouteTemplate">
        <local:RouteControl DataContext="Routes"></local:RouteControl>
    </DataTemplate>
...
<map:MapItemsControl ItemTemplate="{StaticResource RouteTemplate}"
                             ItemsSource="{Binding Routes}"/>

xamlからRouteコレクションのすべてのオブジェクトのLocations配列とRoutePoints配列にアクセスするにはどうすればよいですか?

ポール・ヴィノグラドフ

解決策を見つけました:カスタムコントロールを作成する代わりに、パネルにあるコントロールを使用してカスタムスタイルを作成しました。これはそれがどのように見えるかです

   <Style x:Key="RouteTemplate"  TargetType="map:MapItem">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Visible}" Value="True"></DataTrigger>
        </Style.Triggers>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="map:MapItem">
                    <map:MapPanel>
                    <map:MapPolyline Locations="{Binding Locations}" Stroke="Red" StrokeThickness="3"/>
                        <map:MapItemsControl ItemsSource="{Binding Points}"
                             ItemContainerStyle="{StaticResource PointItemStyle}"
                             IsSynchronizedWithCurrentItem="True"
                             SelectionMode="Extended" AllowDrop="True"/>
                    </map:MapPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

そして、私はそれをこのようにバインドします

<map:MapItemsControl ItemContainerStyle="{StaticResource RouteTemplate}"
                             ItemsSource="{Binding Routes}"/>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オブジェクト内のオブジェクトのMVCバインディングリスト

分類Dev

オブジェクトの配列内のオブジェクト内のオブジェクト内の配列をフィルタリングします

分類Dev

バインディングオブジェクトの削除/削除

分類Dev

オブジェクトの配列内のオブジェクトキーのフィルタリング

分類Dev

オブジェクトの配列内のjavascriptオブジェクトのインデックス

分類Dev

XAMLデータバインディングシングルトンのようなMVVMオブジェクト

分類Dev

要素の配列(非オブジェクト)の* ngForでの双方向バインディング

分類Dev

配列を使用したForeachバインディングオブジェクト

分類Dev

Angular 2モデルバインディング(オブジェクトの配列)

分類Dev

配列内のオブジェクトの最後のインデックス

分類Dev

WebAPIバインディングはAngularのオブジェクトオブジェクトです

分類Dev

複雑なオブジェクトの配列でAngularjsバインディングが機能しない

分類Dev

javascriptを使用して配列オブジェクトの配列オブジェクト内のデータをフィルタリングする

分類Dev

オブジェクトjavascript内の配列のフィルタリング

分類Dev

Javaオブジェクトクラスの動的バインディング

分類Dev

リスト内のオブジェクトへのデータバインディング

分類Dev

動的オブジェクトの双方向データバインディング

分類Dev

オブジェクトとの双方向データバインディング?

分類Dev

UIDocumentPickerオブジェクトの状態バインディングの問題

分類Dev

反応中のオブジェクトのネストされた配列とのバインディングチェックボックス

分類Dev

オブジェクトのGolang静的vs動的バインディング

分類Dev

Angular2:Mapオブジェクトの双方向バインディング

分類Dev

Pythonオブジェクト間のコピーとバインディング

分類Dev

SpringMVCの部分的なオブジェクトバインディング

分類Dev

Angularの新しいオブジェクトバインディング

分類Dev

オブジェクト内のオブジェクトの配列からアレイ内のオブジェクトの配列へのデータの操作

分類Dev

配列内のオブジェクト

分類Dev

MainWindowクラス内で作成されたオブジェクトへのWPFバインディング

分類Dev

javascriptの配列内のオブジェクト内の配列をフィルタリングします

Related 関連記事

  1. 1

    オブジェクト内のオブジェクトのMVCバインディングリスト

  2. 2

    オブジェクトの配列内のオブジェクト内のオブジェクト内の配列をフィルタリングします

  3. 3

    バインディングオブジェクトの削除/削除

  4. 4

    オブジェクトの配列内のオブジェクトキーのフィルタリング

  5. 5

    オブジェクトの配列内のjavascriptオブジェクトのインデックス

  6. 6

    XAMLデータバインディングシングルトンのようなMVVMオブジェクト

  7. 7

    要素の配列(非オブジェクト)の* ngForでの双方向バインディング

  8. 8

    配列を使用したForeachバインディングオブジェクト

  9. 9

    Angular 2モデルバインディング(オブジェクトの配列)

  10. 10

    配列内のオブジェクトの最後のインデックス

  11. 11

    WebAPIバインディングはAngularのオブジェクトオブジェクトです

  12. 12

    複雑なオブジェクトの配列でAngularjsバインディングが機能しない

  13. 13

    javascriptを使用して配列オブジェクトの配列オブジェクト内のデータをフィルタリングする

  14. 14

    オブジェクトjavascript内の配列のフィルタリング

  15. 15

    Javaオブジェクトクラスの動的バインディング

  16. 16

    リスト内のオブジェクトへのデータバインディング

  17. 17

    動的オブジェクトの双方向データバインディング

  18. 18

    オブジェクトとの双方向データバインディング?

  19. 19

    UIDocumentPickerオブジェクトの状態バインディングの問題

  20. 20

    反応中のオブジェクトのネストされた配列とのバインディングチェックボックス

  21. 21

    オブジェクトのGolang静的vs動的バインディング

  22. 22

    Angular2:Mapオブジェクトの双方向バインディング

  23. 23

    Pythonオブジェクト間のコピーとバインディング

  24. 24

    SpringMVCの部分的なオブジェクトバインディング

  25. 25

    Angularの新しいオブジェクトバインディング

  26. 26

    オブジェクト内のオブジェクトの配列からアレイ内のオブジェクトの配列へのデータの操作

  27. 27

    配列内のオブジェクト

  28. 28

    MainWindowクラス内で作成されたオブジェクトへのWPFバインディング

  29. 29

    javascriptの配列内のオブジェクト内の配列をフィルタリングします

ホットタグ

アーカイブ