如果我将相同的属性绑定到相同类型的另一个控件,在我的例子中绑定到 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);
}
}
}
}
问题在于您手动将 ListViewItems 添加到
Items
集合中。 ListViewItem
是一个 UI 元素,在可视化树中只能有一个父元素。它不能同时包含在两个视觉树上。
不要使用
BindableCollection<ListViewItem>
,而使用 BindableCollection<string>
。将为 ListView 中的每个字符串项自动创建一个 ListViewItem。
请注意,当您未设置
ListView
属性时,您不会使用 View
,例如到GridView
。请改用更简单的 ListBox
基类。