Bind Observable коллекция - PullRequest
0 голосов
/ 30 января 2012

Как мне связать это в XAML?

Я собираюсь использовать наблюдаемую коллекцию для заполнения 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}" />

Ответы [ 3 ]

4 голосов
/ 31 января 2012

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

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

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

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

1 голос
/ 31 января 2012

С вашим кодом не так много вещей

Прежде всего, ваш 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}" />
0 голосов
/ 31 января 2012

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

...