当我将相同的属性绑定到另一个ListView时,ListView保持为空

问题描述 投票:0回答:1

如果我将相同的属性绑定到相同类型的另一个控件,在我的例子中绑定到 ListView,那么第一个 ListView 将填充对象,但第二个 ListView 保持为空。我使用了 OneWay 和 TwoWay 模式,但直到现在我还找不到在两个 ListView 中显示相同条目的解决方案。

这是我的代码。 我希望你可以帮助我。 附注我用的是MVVM

App.Xaml.cs

using System.Windows;

namespace WPF_TestApp
{
    public partial class App : Application
    {
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            MainWindow mainWindow = new MainWindow();
            mainWindow.Show();
        }
    }
}

MainView.xaml

<Window x:Class="WPF_TestApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF_TestApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Border Grid.Column="0" BorderBrush="#FF313131" BorderThickness="1" CornerRadius="0,0,5,5" Margin="5,0,5,5">
            <ListView
              AlternationCount="2"
              ItemsSource="{Binding Items}"/>
        </Border>
        <Border Grid.Column="1" BorderBrush="#FF313131" BorderThickness="1" CornerRadius="0,0,5,5" Margin="5,0,5,5">
            <ListView 
              AlternationCount="2"
              ItemsSource="{Binding Items}"/>
        </Border>
    </Grid>
</Window>

MainView.xaml.cs

using System.Windows;
using WPF_TestApp.MVVM.ViewModel;

namespace WPF_TestApp
{
    public partial class MainWindow : Window
    {
        public MainViewModel viewModel {  get; set; }

        public MainWindow()
        {
            viewModel = new MainViewModel();
            InitializeComponent();
            this.DataContext = viewModel;
        }
    }
}

MainViewModel.cs

using Caliburn.Micro;
using System.Windows.Controls;

using WPF_TestApp.MVVM.Model;

namespace WPF_TestApp.MVVM.ViewModel
{
    public class MainViewModel
    {
        public MainModel Model { get; set; }
        public BindableCollection<ListViewItem> Items { get; set; }


        public MainViewModel()
        {
            Model = new MainModel();
            Items = Model.Items;
        }

    }
}

MainModel.cs

using Caliburn.Micro;
using System.Windows.Controls;

namespace WPF_TestApp.MVVM.Model
{
    public class MainModel
    {
        public BindableCollection<ListViewItem> Items {  get; set; }
        public MainModel()
        {
            Items = new BindableCollection<ListViewItem>();

            for(int i = 0; i<=100; i++)
            {
                ListViewItem item = new ListViewItem();
                item.Content = $"Item >>>{i.ToString()}";
                Items.Add(item);
            }
        }
    }
}

c# wpf listview data-binding binding
1个回答
0
投票

问题在于您手动将 ListViewItems 添加到

Items
集合中。
ListViewItem
是一个 UI 元素,在可视化树中只能有一个父元素。它不能同时包含在两个视觉树上。

不要使用

BindableCollection<ListViewItem>
,而使用
BindableCollection<string>
。将为 ListView 中的每个字符串项自动创建一个 ListViewItem。


请注意,当您未设置

ListView
属性时,您不会使用
View
,例如到
GridView
。请改用更简单的
ListBox
基类。

© www.soinside.com 2019 - 2024. All rights reserved.