Элемент управления Silverlight ListBox не привязывается правильно - PullRequest
1 голос
/ 06 ноября 2010

Я использую элемент управления ListBox с ItemTemplate следующим образом:

<ListBox Name="lbItemsList" ItemsSource="{Binding}" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding ID}" Padding="5,0,0,0" />
                <TextBlock Text=" - " Padding="5,0,0,0" />
                <TextBlock Text="{Binding Description}" Padding="5,0,0,0" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Затем в коде я динамически привязываю коллекцию к ListBox следующим образом:

lbItemssList.ItemsSource = _itemsList.Values;

Но иногда мне нужно привязать другой или измененный список элементов к ListBox.Когда я делаю это, ListBox не обновляется с новым списком, и кажется, что привязка не работает правильно, если я не сделаю это:

lbItemssList.ItemsSource = null;
lbItemssList.ItemsSource = _itemsList.Values;

Я сделал то же самое с другимиЭлементы управления ListBox и не имели этой проблемы.Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 06 ноября 2010

Прежде всего здесь нет привязки, вы просто присвоили коллекцию свойству ItemsSource.

Свойство ItemsSource будет сравнивать присвоенное ему значение с текущим значением,если значение одинаково, оно ничего не сделает.

Я предполагаю, что ваше свойство Values не является ObservableCollection (в этом случае ListBox будет отслеживать изменения коллекции без необходимости что-либо делать).Кроме того, хотя вы, возможно, изменили содержимое коллекции Values, она остается тем же экземпляром коллекции, первоначально назначенной для ItemsSource.

0 голосов
/ 06 ноября 2010

Я устал, что на моей стороне, и она работает нормально.Мой код

public MainPage()
    {
        InitializeComponent();
        BindData();
    }

private void BindData()
    {
        List<MyClass> listClass = new List<MyClass>();
        for (int i = 0; i < 20; i++)
        {
            MyClass aMyClass = new MyClass();
            aMyClass.Description = "Description  " + i.ToString();
            aMyClass.ID = i;
            listClass.Add(aMyClass);
        }

        lbItemsList.ItemsSource = listClass;
    }

private void buttonaa_Click(object sender, RoutedEventArgs e)
    {
        List<MyClass> listClass = new List<MyClass>();
        for (int i = 20; i < 40; i++)
        {
            MyClass aMyClass = new MyClass();
            aMyClass.Description = "Description  " + i.ToString();
            aMyClass.ID = i;
            listClass.Add(aMyClass);
        }
        lbItemsList.ItemsSource = null;
        lbItemsList.ItemsSource = listClass;
    }



 <ListBox Name="lbItemsList" ItemsSource="{Binding}" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding ID}" Padding="5,0,0,0" />

                    <TextBlock Text="{Binding Description}" Padding="5,0,0,0" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

Убедитесь, что вы получаете то же самое записанное из базы данных, и вы думаете, что список не обновляет

...