当前位置: 首页 > 知识库问答 >
问题:

ListView中的绑定问题

梁丘权
2023-03-14

我有一个ListView,并设置了ItemContainerStyle,但我仍然遇到同样的问题。请帮忙

<ListView Width="Auto" Height="1" Name="ListViewDetails" 
          ItemsSource="{Binding DetailsObservableCollection}">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="VerticalContentAlignment" Value="Stretch"/>
        </Style>
    </ListView.ItemContainerStyle>

共有1个答案

贝成业
2023-03-14

我不能重复你的错误。很好用。在我看来,您在视图模型的属性中有一些不正确的初始化。参见MVVM ListView的工作示例。

模型:

 public class Person
 {
    public int ID { get; set; }
    public string Name { get; set; }
    public string Author { get; set; }
    public bool IsClickable { get; set; }
 }

ViewModel:

public class MainWindowViewModel:INotifyPropertyChanged
    {        
        private ObservableCollection<Person> _persons=new ObservableCollection<Person>();
        public ObservableCollection<Person> Persons
        {
            get
            {
                return _persons=GetData();
            }
            set
            {
                _persons = value;
                OnPropertyChanged("Persons");
            }
        }        

        public ObservableCollection<Person> GetData()
        {
             myDataList.Add(new Person() { ID = 1, Name = "Person1", Author = "Author1", Price = "6.7 TL", Catalog = "IT", IsClickable=true});
             myDataList.Add(new Person() { ID = 2, Name = "Person2", Author = "Author2", Price = "9.7 TL", Catalog = "IT", IsClickable = false});
             myDataList.Add(new Person() { ID = 3, Name = "Person3", Author = "Author3", Price = "11.7 TL", Catalog = "IT", IsClickable = true});
             myDataList.Add(new Person() { ID = 2, Name = "Person4", Author = "Author2", Price = "9.7 TL", Catalog = "IT", IsClickable = true});
             myDataList.Add(new Person() { ID = 3, Name = "Person5", Author = "Author3", Price = "11.7 TL", Catalog = "IT", IsClickable = false});
            if (myDataList.Count > 0)
            {
                return myDataList;
            }
            else
                return null;
        }

        RelayCommand _clickCommand = null;
        public ICommand SomeClickCommand
        {
           get
           {
              if (_clickCommand == null)
                {
                   _clickCommand = new RelayCommand((p) => OnClick(p), (p) => CanClick(p));
                }

            return _clickCommand;
           }
        }

        private bool CanClick(object obj)
        {
           return true;
        }

        private void OnClick(object obj)
        {
           MessageBox.Show("You clicked:)");
        }

        #region OnPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("propertyName"));
        }
        #endregion
    } 
<Window x:Class="WpfApplication1.MainWindow"
        ...
        xmlns:local="clr-namespace:WpfApplication1.ViewModel"
        Title="MainWindow" Height="550" Width="525">
    <Window.Resources>
        <local:MainWindowViewModel x:Key="mainWindowViewModel"/>
    </Window.Resources>
   <StackPanel DataContext="{StaticResource mainWindowViewModel}">
    <ListView ItemsSource="{Binding Persons}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <WrapPanel>                        
                    <TextBlock Text="{Binding Name}" Background="LightGreen" Margin="1"/>
                    <TextBlock Text="{Binding Author}" Background="LightCyan" Margin="1"/>
                    <TextBlock Text="{Binding TimeGap}" Background="LightCoral" Margin="1"/>                        
                    <CheckBox IsChecked="{Binding IsClickable}" CommandParameter="{Binding}" Command="{Binding DataContext.SomeClickCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}}"  Margin="1"/>

                </WrapPanel>
            </DataTemplate>
        </ListView.ItemTemplate>            
    </ListView>
    </StackPanel>
</Window>
 <CheckBox IsChecked="{Binding IsClickable}" CommandParameter="{Binding}" Command="{Binding DataContext.SomeClickCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}}"  Margin="1"/>
 类似资料:
  • 我有一个组合框,它在下拉列表中显示listview,我遵循MVVM模式,我也在我的Viewmodel中设置了公共属性,当我将其分配给标签时,它工作正常,但对于组合框,它似乎不依赖于我的绑定。我尝试了很多方法,但都找不到问题所在。 XAML: 当我使用公共属性并访问它的元素时,这对我来说很好,我还尝试设置text={绑定选择MU.MU_Identifier}和选择值,但它不起作用。

  • 现在,我正在尝试让ListView具有一些可绑定的CustomCells。我将XAML中的单元格定义为DataTemplate下的ViewCell和ListView.ItemTemplate下的ViewCell。 为了简单起见,让我们假设我在单元格中表示了两个字符串。ViewCell看起来如下所示: 编辑1: 我尝试编写一个模仿一些示例的文件,但这还不够。没有一段代码解释该文件是XAML中表示Vi

  • 我试图将列表视图绑定到类的可观察集合,由于某种原因,GridViewColumn的DisplayMemberBinding属性没有绑定到集合的内容。如果我使用ListView.ItemTemplate,一切都很好。但是我需要网格形式的数据,所以我在ListView.View中使用GridView。 第一个映像,映像1是调试模式下的AssessmentSummaryList内容。第二个图像,图像2是

  • 我正在创建一个asp.net页面,允许用户跨多个数据库搜索。 如果找到匹配项,我希望在主ListView中返回数据库名称。然后,我想在相应的数据库名称下,在嵌套的ListView中显示与搜索条件匹配的所有公司。 e. g.搜索:公司 后果 数据库1名称 数据库2名称 数据库3名称 如何引用和填充嵌套的ListView?

  • 本文向大家介绍C#中WPF ListView绑定数据的实例详解,包括了C#中WPF ListView绑定数据的实例详解的使用技巧和注意事项,需要的朋友参考一下 C#中WPF ListView绑定数据的实例详解 WPF中ListView用来显示数据十分方便, 我们可以将它分成几个列,每一个列用来显示一条数据,但是又是在一方之中。 那么怎样实现这样的效果的呢,这就要用绑定了。 我们先来看一看他的xma

  • 我最近正在使用javaFx,并希望通过绑定堆栈更新实现观察者模式,使用javaFx中的ListView或TableView。但是,我不知道要对我的ComplexNumberStack类做什么更改。