绑定Observable集合

时间:2012-01-30 19:55:27

标签: c# wpf xaml observablecollection

我如何在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 个答案:

答案 0 :(得分:4)

您可以在绑定中访问的唯一内容是publicinternal不起作用)属性和public类的索引器。

无论如何,在方法中声明的变量永远不会从所述方法之外的任何地方访问。以前使用脚本语言的人经常会犯错误。要访问方法之外(或另一个方法之外)的东西,必须在方法之外声明。

一个有用的提示:Visual Studio的Output窗口是一个非常有用的工具,用于跟踪绑定错误。

旁注:绑定区分大小写。即使您的代码遵循上述规则,WPF仍然无法找到绑定源,因为绑定路径为Name_col,但属性的名称为Name_Col

答案 1 :(得分: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}" />

答案 2 :(得分:0)

假设粘贴了此代码,您的绑定将查看不存在的属性。尝试在绑定中大写“c”。 Name_col - &gt; Name_Col