我试图创建一个新窗口(MainWindow的子窗口),每次都会显示不同数量的行和数据。我使用了以下从wpf模板教程复制的模板。我已经检查过数据是否正确,我可以使用MessageBox.Show窗口将它们正确投影,但我无法将它们显示为绑定属性。这是xaml ......
<ListView x:Name="listUnits" x:FieldModifier="public" HorizontalAlignment="Left" Height="Auto" Margin="5,5,5,5" VerticalAlignment="Top" Width="Auto">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Id:"/>
<TextBlock Text="{Binding pu_Id}" Width="Auto"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding pu_unitName}" Width="Auto"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
因此虽然pu_unitName包含数据,但它们会在新窗口中显示。
绑定在构造函数中完成:
public partial class ChooseUnit : Window
{
public ChooseUnit(List<XML_Handler.PrUnits> thisList)
{
InitializeComponent();
listUnits.ItemsSource = thisList;
}
}
PrUnits是一个包含变量的类,包括pu_id和pu_unitName。那么这段代码有什么问题呢?
答案 0 :(得分:1)
由于您只能绑定到公共属性,因此您需要确保pu_Id
和pu_UnitName
是PrUnits
的属性(而不是字段)类。然后您的绑定将起作用。
另请注意,这不是绑定:
listUnits.ItemsSource = thisList;
通常,您可以将父窗口的DataContext
设置为视图模型类的实例,并将ItemsSource
的{{1}}属性绑定到返回{的属性{1}}:
ListView
答案 1 :(得分:0)
在你的.cs:
public partial class ChooseUnit : Window
{
public ChooseUnit(List<XML_Handler.PrUnits> thisList)
{
InitializeComponent();
this.DataContext = thisList;
}
}
这样做会将窗口的数据上下文分配给您尝试传递的项目列表。此时,该窗口中的每个元素都可以访问传入的列表。 然后在您的XAML中执行此操作:
<ListView x:Name="listUnits" ItemsSource="{Binding .}" x:FieldModifier="public" HorizontalAlignment="Left" Height="Auto" Margin="5,5,5,5" VerticalAlignment="Top" Width="Auto">
这允许我们使用绑定,因为整个窗口都可以访问列表。因此ItemsSource="{Binding .}"
。
修改强>
更多地了解您的问题并感谢Ash您的类需要使用实现的INotifyPropertyChanged接口公开Properties。
WPF框架需要此接口,因此它可以订阅已更改的事件并更新UI。