2012-01-30 3 views
0

Как я могу связать это в XAML?Bind Observable collection

Я ищу, чтобы использовать наблюдаемую коллекцию для заполнения ListView когда-либо, когда вызывается метод, который будет проходить через событие drop на другом элементе управления. Коллекция также добавляется, но ListView не будет заполняться.

Я не использовал WPF долго, поэтому любое понимание было бы замечательным.

namespaceA 
{ 
    public class SomeClassA 
    { 
     public string FirstName { get; set; } 
    } 

    public class SomeClassB 
    { 
     public void MethodA() 
     { 
      ObservableCollection<SomeClassA> Name_Col = new ObservableCollection<SomeClassA>(); 
      Name_col.Add(new SomeClassA { FirstName = "SomeValue" }); 
     } 
    } 
} 

XAML:

<ObjectDataProvider 
    x:Key="Viewmodel" 
    ObjectType="{x:Type Local:NamespaceA}"/> 

<ListView DataContext="{StaticResource Viewmodel}" 
    Height="396" 
    HorizontalAlignment="Left" 
    Margin="766,67,0,0" 
    Name="listView1" 
    VerticalAlignment="Top" 
    Width="260" 
    ItemsSource="{Binding Name_col}" /> 

ответ

4

Единственное, что вы можете получить доступ в привязках public (internal не работает) свойства и индексаторы из public классов.

И независимо от того, как переменные, объявленные внутри метода, никогда не будут доступны нигде вне указанного метода. Часто случается, что люди часто используют языки скриптов. Чтобы получить доступ к чему-либо вне метода (или внутри другого), это должно быть объявлено вне метода.

Один из полезных советов: Окно Visual Studio Output - очень полезный инструмент для отслеживания ошибок привязки.

На боковой ноте: Привязки чувствительны к регистру. Даже если ваш код соответствует указанным выше правилам, WPF все равно не найдет источник привязки, поскольку ваш путь привязки - Name_col, но имя свойства - Name_Col.

+0

имеет смысл, что он не может быть установлен как статические; сегодня мне не хватает кофе. Случай был опечаткой, поскольку это не было копией и вставкой. Я просто должен реализовать свой собственный интерфейс для события drop в коде, который, я полагаю. –

0

Предполагая, что этот код вставлен, ваша привязка рассматривает несуществующее свойство. Попробуйте использовать «c» в вашей привязке. Name_col -> Name_Col

+0

Это все еще не работает, поскольку желаемый источник привязки объявляется внутри метода. – Nuffin

+0

Также вам нужно объявить Name_Col как общедоступную собственность на SomeClassB –

1

Есть довольно много вещей, не так с вашим кодом

Во-первых, ваш DataContext указывает на пространство имен, а не объект. Измените это как экземпляр объекта.

<ObjectDataProvider x:Key="Viewmodel" ObjectType="{x:Type local:SomeClassB}"/> 

Или

<local:SomeClassB x:Key="Viewmodel" /> 

Во-вторых, ваш ObservableCollection не является публичной собственностью, поэтому ваш взгляд не может видеть, ни доступа к нему.

public class SomeClassB 
{ 
    public ObservableCollection<SomeClassA> Name_Col { get; set; } 

    public void MethodA() 
    { 
     Name_Col = new ObservableCollection<SomeClassA>(); 
     Name_col.Add(new SomeClassA { FirstName = "SomeValue" }); 
    } 
} 

И в последнюю очередь, WPF привязок чувствительны к регистру, так что вам нужно исправить переплета ItemsSource использовать правильный регистр

<ListView ... 
    ItemsSource="{Binding Name_Col}" /> 
Смежные вопросы