[英]Bind Observable collection
我將如何在XAML中進行綁定?
我希望在ListView
調用方法時都使用可觀察的集合來填充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}" />
綁定中唯一可以訪問的是public
( internal
不起作用)屬性和public
類的索引器。
而且無論如何, 在方法內部聲明的變量將永遠無法從該方法外部訪問。 這是過去使用腳本語言的人們經常犯的錯誤。 要訪問某個方法外部(或另一個內部)的內容,必須在該方法外部聲明該內容。
一個有用的提示:Visual Studio的“ Output
窗口是跟蹤綁定錯誤的非常有用的工具。
附帶說明:綁定區分大小寫。 即使您的代碼遵循上述規則,WPF仍將找不到綁定源,因為您的綁定路徑是Name_col
,但是屬性的名稱是Name_Col
。
您的代碼有很多錯誤
首先,您的DataContext指向名稱空間,而不是對象。 將其更改為對象的實例。
<ObjectDataProvider x:Key="Viewmodel" ObjectType="{x:Type local:SomeClassB}"/>
要么
<local:SomeClassB x:Key="Viewmodel" />
其次,您的ObservableCollection
不是公共屬性,因此您的View無法看到或訪問它。
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}" />
假設粘貼了此代碼,則您的綁定正在查看不存在的屬性。 嘗試在綁定中將“ c”大寫。 Name_col-> Name_Col
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.