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;

但它仍然没有绑定,列表视图中只填充了一个空行。我检查了数据,它都存在。任何帮助将不胜感激,谢谢。

4

2 回答 2

1

ListView 将单个集合作为 ItemsSource,因此如果您想为每个项目显示多个 TextBlock - 您需要一个具有多个文本属性的对象集合来绑定到您的 DataTemplate。在您的情况下, routeData 不是集合。相反,您需要定义您的项目视图模型,例如

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

然后你会将你的 ListView.ItemSource 绑定到一个 List 并在你的 DataTemplate 中像这样绑定它:

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

如果您的集合在首次绑定到 ListView 后从未更改(SelectedItem 不构成更改),则您不需要使用 ObservableCollection。

于 2013-01-26T22:06:43.443 回答
0

如果您的视图被调用routeView,不应该将您DataContext设置为的新实例routedata吗?另外,我建议您将ObservableCollection<T>用于可绑定集合,而不是List<T>.

于 2013-01-26T20:59:09.843 回答