C#WPF这个模板有什么问题?

时间:2017-08-11 09:37:30

标签: wpf templates

我试图创建一个新窗口(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。那么这段代码有什么问题呢?

2 个答案:

答案 0 :(得分:1)

由于您只能绑定到公共属性,因此您需要确保pu_Idpu_UnitNamePrUnits的属性(而不是字段)类。然后您的绑定将起作用。

另请注意,这不是绑定:

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。