CSharp - ListBox的简单WPF数据绑定到字符串的集合

  显示原文与译文双语对照的内容
0 0

我只是不明白。 请告诉我为什么我的列表框( 应该是两个字符串"中没有空的"还有"内容"立即):

XAML:


<Window.DataContext>
 <Windows:SettingsWindowModel x:Name="model"/>
</Window.DataContext>

<Window.Resources>
 <DataTemplate x:Key="ListItemTemplate">
 <ListBoxItem Content="{Binding}"/>
 </DataTemplate>
</Window.Resources>

<ListBox Name="listBoxActivities" SelectionChanged="ListBoxActivitiesSelectionChanged"
 ItemsSource="{Binding Path=IgnoredActivities}"
 HorizontalAlignment="Left" VerticalAlignment="Top" MinHeight="40" MinWidth="200"
 Padding="5,100,5,0" Height="100" Margin="0,207,0,0" ItemTemplate="{StaticResource ListItemTemplate}"/>

在SettingsWindowModel中:


 private ObservableCollection<String> _ignoredActivities;
 public ObservableCollection<String> IgnoredActivities
 {
 get
 {
 if (_ignoredActivities == null)
 {
//empty
 _ignoredActivities = new ObservableCollection<String>() {"empty","stuff" };
 }
 return _ignoredActivities;
 }
 }

你还有什么需要知道的? 我忘记了什么?

编辑:也许我应该添加 Visual Studio + ReSharper show也没有显示下划线和编译错误。 连警告都没有。

时间: 原作者:

0 0

抱歉数据一直在这里。 问题在于视觉细节。 填充也被应用到ListBox的一个子容器,因此items不放在 List的顶端。 在列表框的高度上,项目总是低于列表框的可见高度。 要调试的Stange东西,谢谢你的回答 !

原作者:
0 0

1 ) 你不需要设置 DataTemplate

2 ) 你确定视图( aaaaa.xaml.cs )的DataContext是 ViewModel ( 。bbbbb.cs, 包含 IgnoredActivities )?

应该是这样的:

aaaaa.xaml:


<ListBox ItemsSource="{Binding IgnoredActivities}"/>

aaaaa.xaml.cs:


public partial class aaaaa : Window, INotifyPropertyChanged
{
 public MainWindow()
 {
 InitializeComponent();
 this.DataContext = new bbbbb();
 }
}

bbbbb.cs:


 public class bbbbb : INotifyPropertyChanged
 {
 public bbbbb()
 {
 IgnoredActivities.Add("empty");
 IgnoredActivities.Add("stuff");
 }

 private ObservableCollection<String> _ignoredActivities;
 public ObservableCollection<String> IgnoredActivities
 {
 get
 {
 if (_ignoredActivities == null)
 {
//empty
 _ignoredActivities = new ObservableCollection<String>() {"empty","stuff" };
 }
 return _ignoredActivities;
 }
 }

 #region INotifyPropertyChanged Members

 public event PropertyChangedEventHandler PropertyChanged;
 private void RaisePropertyChanged(string _Prop)
 {
 if (PropertyChanged!= null)
 PropertyChanged(this, new PropertyChangedEventArgs(_Prop));
 }

 #endregion
 }
}

原作者:
0 0

确保 DataContext 包含英镑的IgnoredActivities,并为它绑定::


ItemsSource="{Binding IgnoredActivities}"

0 0

使用这里语句,你将绑定到窗口名为"型号"的控件中的属性"ignoredactivities"。


ItemsSource="{Binding ElementName=model, Path=IgnoredActivities}"

在使用ViewModels时,将它们设置为控件的DataContext:


<ListBox ItemsSource="{Binding IgnoredActivities}">
 <ListBox.DataContext>
 <local:MyViewModel/>
 </ListBox.DataContext> 
</ListBox>

没有源指定("{Binding PathToMyPropert}")的绑定默认为控件的DataContext,该控件继承自父控件。 所以在你的例子中,你可以将你的iframe设置为窗口的DataContext,所以它可以用于所有的子级:


<Window>
 <Window.DataContext>
 <local:MyViewModel/>
 </Window.DataContext> 

 <ListBox ItemsSource="{Binding IgnoredActivities}"/> 
</Window>

0 0

删除 ElementName 绑定属性。 它用于绑定到WPF控件。 简单设置 ItemsSource={Binding IgnoredActivities}

0 0

请按如下方式尝试:


<ItemsControl ItemsSource="{Binding Path=IgnoredActivities}">
 <ItemsControl.ItemsPanel>
 <ItemsPanelTemplate>
 <ListBox/>
 </ItemsPanelTemplate>
 </ItemsControl.ItemsPanel>
 <ItemsControl.ItemTemplate>
 <DataTemplate>
 <ListBoxItem Content="{Binding}"/>
 </DataTemplate>
 </ItemsControl.ItemTemplate>
</ItemsControl>

0 0

尝试在后面的代码中设置控件的DataContext 。


Xaml - <ListBox Name="myListBox" ItemsSource="{Binding IgnoredActivities}"/> 
CodeBehind - myListBox.DataContext=this;

...