我如何在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}" />
答案 0 :(得分:4)
您可以在绑定中访问的唯一内容是public
(internal
不起作用)属性和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