0

Cannot bind objects to ListBox. Data are there I guess it is something about Binding.

Any clue?

C#

   public sealed class Package
    {
        public Guid ID { get; set; }

        public string FileName { get; set; }

        public List<PackageItem> PackageItems { set; get; }
    }

    public sealed class PackageItem
    {
        public Guid ID { get; set; }

        public string FileName { get; set; }

        public PackageItemTypes PackageItemType { get; set; }
    }

private ObservableCollection<Package> availablePackages;

 lbPackageList.Dispatcher.BeginInvoke((Action)(() =>
                    {
                        lbPackageList.DataContext = availablePackages;
                    }));

XAML

<ListBox Name="lbPackageList"
         VerticalAlignment="Stretch"
         HorizontalAlignment="Stretch"
         ScrollViewer.VerticalScrollBarVisibility="Visible">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal">
        <Label Content="{Binding Path=Package.FileName}" />
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

Error

System.Windows.Data Error: 3 : Cannot find element that provides DataContext. BindingExpression:(no path); DataItem=null; target element is 'Button' (Name=''); target property is 'NoTarget' (type 'Object')

Daniel
  • 10,864
  • 22
  • 84
  • 115
NoWar
  • 36,338
  • 80
  • 323
  • 498
  • @ConradClark System.Windows.Data Error: 3 : Cannot find element that provides DataContext. BindingExpression:(no path); DataItem=null; target element is 'Button' (Name=''); target property is 'NoTarget' (type 'Object') – NoWar Apr 11 '13 at 18:16
  • 1
    See post : http://stackoverflow.com/questions/3169245/difference-between-itemssource-and-datacontext-as-pertains-to-listbox – David C Apr 11 '13 at 18:23

1 Answers1

0

I found solution

 lbPackageList.ItemsSource = availablePackages;

 void engine_PackgesChanged(Models.Package newPackage)
        {
            Debug.WriteLine("There is a new package here " + newPackage.FileName);

            try
            {
                lbPackageList.Dispatcher.BeginInvoke((Action)(() =>
                   {
                       if (availablePackages.Contains(newPackage) == false)
                       {
                           availablePackages.Add(newPackage);
                       }
                   }));
            }
            catch (Exception)
            {
                // 
            }
        }
NoWar
  • 36,338
  • 80
  • 323
  • 498