2

データのあるクラスがあります:

public class routedata : INotifyPropertyChanged

{

    private List<double> distances;
    public List<double> Distances
    {
        get { return this.distances; }
        set
        {
            if (this.distances != value)
            {
                this.distances = value;
                this.onPropertyChanged("Distances");
            }
        }
    }

    private List<string> instructions;
    public List<string> Instructions
    {
        get { return this.instructions; }
        set
        {
            if (this.instructions != value)
            {
                this.instructions = value;
                this.onPropertyChanged("Instructions");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void onPropertyChanged(string property)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }        
}

私はそれを次のようなリストビューにバインドしようとしています:

     <GridView Name="routeView" HorizontalAlignment="Left" Height="310" Margin="1025,318,0,0" Grid.Row="1"      
           VerticalAlignment="Top" Width="340" >
            <ListView Name="routeList" Height="300" Width="330" ItemsSource="{Binding routeData}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Instructions}"
                                                      TextWrapping="Wrap" Width="200"/>
                            <TextBlock Text="{Binding Distances}"
                                                      Margin="10,0,0,0" />
                            <TextBlock Text="km"/>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </GridView>

私は私のc#コードの後ろにあります:routeList.datacontext = this;

ただし、それでもバインドは行われず、リストビューには空の行が1つだけ入力されます。データを確認しましたが、すべて存在しています。助けていただければ幸いです。

4

2 に答える 2

1

ListViewはItemsSourceとして単一のコレクションを取得するため、アイテムごとに複数のTextBlockを表示する場合は、DataTemplateにバインドするために複数のテキストプロパティを持つオブジェクトのコレクションが必要です。あなたの場合、routeDataはコレクションではありません。代わりに、アイテムビューモデルを定義する必要があります。

public class RoutePoint
{
    public double Distance { get; set; }
    public string Instruction { get; set; }
}

次に、ListView.ItemSourceをリストにバインドし、DataTemplateで次のようにバインドします。

<TextBlock Text="{Binding Distance}"/>
<TextBlock Text="{Binding Instruction}"/>

コレクションを初めてListViewにバインドした後、コレクションが変更されない場合は、ObservableCollectionを使用する必要はありません(SelectedItemは変更を構成しません)。

于 2013-01-26T22:06:43.443 に答える
0

ビューが呼び出された場合、の新しいインスタンスに設定するrouteView必要はありませんか?また、バインド可能なコレクションには、ではなくを使用することをお勧めします。DataContextroutedataObservableCollection<T>List<T>

于 2013-01-26T20:59:09.843 に答える