WPF Listbox绑定问题

时间:2017-01-12 16:44:56

标签: c# wpf xaml mvvm listbox

我正在创建一个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()
{

}

}

1 个答案:

答案 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>