我正在创建一个N层wpf mvvm项目。我想从数据库中获取要显示在列表框中的项目列表。我想将列表框绑定到ViewModel(VM)中的属性。问题是绑定对我不起作用,列表框总是空的。 当我在“返回标签”上放置一个断点时,它会在显示表单之前完全填充。
MainWindow()构造函数中的DataContext = App.ViewModel;
。
在我的XAML中
<ListBox ItemsSource="{Binding Tags, Mode=OneWay}" Height="161" HorizontalAlignment="Left" Margin="236,6,0,0" Name="lstTags" VerticalAlignment="Top" Width="130" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Tags.Name}" />
<TextBlock Text="{Binding Tags.Description}" />
<!--<CheckBox IsChecked="{Binding Deleted, Mode=TwoWay}"/>-->
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在我的虚拟机中:当我在“返回标签”上设置断点时,它已完全填充。
private TagCol _tags;
public TagCol Tags
{
get {
TagColData tcd = new TagColData();
_tags = tcd.LoadAll();
//NotifyPropertyChanged("Tags");
return _tags;
}
set {
_tags = value;
NotifyPropertyChanged("Tags");
}
}
TagCol:
公共类TagCol { private ObservableCollection _tagCol = new ObservableCollection();
/// <summary>Collection (list) of Tag objects</summary>
public ObservableCollection<Tag> Collection {
get { return _tagCol; }
set
{
_tagCol = value;
}
}
public TagCol()
{
}
}
答案 0 :(得分:0)
伙计当然是在Binding中,它需要设置为 Tags.Collection 顺便说一句,在文本框的子属性中,Collection.Name不会起作用。
好吧,这需要几天的业余时间! :)
<ListBox ItemsSource="{Binding Tags.Collection}" Height="161" HorizontalAlignment="Left" Margin="236,6,0,0" Name="lstTags" VerticalAlignment="Top" Width="130" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=Description}" />
<CheckBox IsChecked="{Binding Deleted, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>