我的列表框未显示项目。这些项目位于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
答案 0 :(得分:1)
您的资源指向新的MyErrors而不是对话框中定义的那个。
只需删除资源部分并直接绑定到MyErrors:
<ListBox DockPanel.Dock="Top" ItemsSource="{Binding MyErrors}" Height="300" Width="250" Margin="0,5,0,10" />
答案 1 :(得分:0)
您应该使用ObservableCollection
来存储错误字符串。
表示动态数据集合,在添加,删除项目或刷新整个列表时提供通知。
这实现了INotifyPropertyChanged
和INotifyCollectionChanged
接口,这些接口通知客户端 - 在本例中为UI - 属性和集合已更改。
如果它们在程序的生命周期中没有发生变化,它可能看起来有点过头了,但它会完成最初更新UI所需的所有接线。