ListBox不使用DataContext

时间:2014-08-13 16:43:09

标签: c# silverlight listbox

我正在尝试使用ListBox显示数据。我正在设置DataContext

public class DataStore
{
    static ObservableCollection<ItemToTrack> _items =
        new ObservableCollection<ItemToTrack>();
    public static ObservableCollection<ItemToTrack> Items
    {
        get { return _items; }
    }
}

xaml:

<ListBox x:Name="ItemList">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Padding="5,0,5,0" Text="{Binding Name}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

设置DataContext的方法:

private void FillBtn_Click(object sender, RoutedEventArgs e)
{
    DataStore.Items.Add(new ItemToTrack() { Name = "Gold palate", Locations =
        new Dictionary<string, double>()
        {
            { "DB City", 101 }, { "Agrawal Jwellers", 110 }
        }});
    DataStore.Items.Add(new ItemToTrack() { Name = "Crockery set", Locations =
        new Dictionary<string, double>()
        {
            { "DB City", 200 }, { "New market", 210 }
        }});
    ItemList.DataContext = DataStore.Items.ToList();
}

除了ListBox中没有任何内容出现外,不会产生任何错误。 如果我在c#代码中将DataContext更改为ItemsSource,则数据会正确显示。

2 个答案:

答案 0 :(得分:1)

您需要在XAML或代码后面设置ItemsSource的{​​{1}}属性,而不是ListBox - 这只用于绑定到ListBox上的任何属性,不是任何一个孩子。

答案 1 :(得分:0)

当您设置ItemsSource的值时,控件将在内部生成模板化项目。 设置DataContext on an ItemsControl将无法实现此目的。

Click here查看有关DataContextItemsSource的正确解释。