将列表绑定到列表框

时间:2010-06-27 19:37:21

标签: wpf xaml binding listbox

我的列表框未显示项目。这些项目位于List<string>

这是xaml:

<DockPanel Margin="10,10,10,10">
    <DockPanel.Resources>
        <local:MyErrors x:Key="myErrors"/>
    </DockPanel.Resources>
    <ListBox DockPanel.Dock="Top" ItemsSource="{StaticResource myErrors}" Height="300" Width="250" Margin="0,5,0,10" 
        />

    <StackPanel DockPanel.Dock="Bottom" HorizontalAlignment="Center" VerticalAlignment="Bottom" Orientation="Horizontal">
        <Button Height="28" Click="buttonOK_Click" Margin="10,10,10,10" IsDefault="True" Name="buttonOK" Width="75">OK</Button>
        <Button Height="28" Click="buttonCancel_Click" Margin="10,10,10,10" IsCancel="True" Name="buttonCancel" Width="75">Cancel</Button>
    </StackPanel>

</DockPanel>

我设置的源是这样的:

DialogErrors dlg = new DialogErrors();
                    dlg.Owner = App.Current.MainWindow as Window;
                    dlg.MyErrors = myOtherClass.MyErrors;

然后我在对话框中有一个自动属性。哪个是List<string>派生类,其类型和名称是MyErrors。

        public MyErrors MyErrors
    {
        get;
        set;
    }

enter code here

2 个答案:

答案 0 :(得分:1)

您的资源指向新的MyErrors而不是对话框中定义的那个。

只需删除资源部分并直接绑定到MyErrors:

<ListBox DockPanel.Dock="Top" ItemsSource="{Binding MyErrors}" Height="300" Width="250" Margin="0,5,0,10" />

答案 1 :(得分:0)

您应该使用ObservableCollection来存储错误字符串。

  

表示动态数据集合,在添加,删除项目或刷新整个列表时提供通知。

这实现了INotifyPropertyChangedINotifyCollectionChanged接口,这些接口通知客户端 - 在本例中为UI - 属性和集合已更改。

如果它们在程序的生命周期中没有发生变化,它可能看起来有点过头了,但它会完成最初更新UI所需的所有接线。