【发布时间】:2013-11-21 01:33:39
【问题描述】:
我是 WPF/C# 的新手,但我遇到了绑定问题:(
我的主窗口中有一个 ListView,它是从列表中绑定的。
我有第二个窗口,其中包含从另一个列表绑定的数据网格(第一个列表的副本)。
我的问题是当我从数据网格(第二个窗口)更新数据时,它也会从第一个窗口升级数据,但我不想要它。 (我希望第一个列表独立于另一个)
这是来自第一个窗口的代码:
public partial class MainWindow : Window
{
List<Voiture> mesBagnoles = new List<Voiture>();
public MainWindow()
{
InitializeComponent();
...
lstViewBagnoles.ItemsSource = mesBagnoles;
...
}
}
xaml:
<ListView Grid.Row="0" x:Name="lstViewBagnoles" selectionChanged="lstViewBagnoles_SelectionChanged" Width="220">
<ListView.Resources>
<Style TargetType="GridViewColumnHeader">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</Style>
</ListView.Resources>
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridViewColumn DisplayMemberBinding="{Binding Marque}"/>
<GridViewColumn DisplayMemberBinding="{Binding Modele}"/>
<GridViewColumn DisplayMemberBinding="{Binding Moteur}"/>
</GridView>
</ListView.View>
</ListView>
打开第二个窗口:
private void btnVoitures_Click(object sender, RoutedEventArgs e)
{
VoituresWindow voitureWindow = new VoituresWindow(mesBagnoles);
voitureWindow.ShowDialog();
}
第二个窗口:
public partial class VoituresWindow : Window
{
public List<Voiture> listBagnoles = new List<Voiture>();
public VoituresWindow(List<Voiture> e)
{
listBagnoles = e;
InitializeComponent();
dataVoitures.ItemsSource = listBagnoles;
}
}
还有 xaml :
<DataGrid x:Name="dataVoitures" Grid.Row="0" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Marque" Binding="{Binding Marque}" />
<DataGridTextColumn Header="Modèle" Binding="{Binding Modele}" />
<DataGridTextColumn Header="Moteur" Binding="{Binding Moteur}" />
...
</DataGrid.Columns>
</DataGrid>
如您所见,列表视图和数据网格的绑定源来自 2 个不同的列表。
我想我想念 DataContext 的东西,否则我找不到办法
希望你能帮助我:)
编辑:
好的,所以我更换了第二个窗口:
private void btnVoitures_Click(object sender, RoutedEventArgs e)
{
VoituresWindow voitureWindow = new VoituresWindow(mesBagnoles);
voitureWindow.ShowDialog();
}
通过这个:
private void btnVoitures_Click(object sender, RoutedEventArgs e)
{
List<Voiture> mesBagnoles2 = new List<Voiture>(mesBagnoles);
VoituresWindow voitureWindow = new VoituresWindow(mesBagnoles2);
voitureWindow.ShowDialog();
}
但第一个窗口列表视图总是由第二个窗口数据网格更新:/ 我认为我的绑定有问题
【问题讨论】:
-
它是同一个列表,你将它的引用传递给构造函数中的
VoituresWindow -
是的,您将相同的 mesBagnoles 传递到第二个窗口。
-
初学者错误:) 我只是从第一个列表中创建了一个新列表,并且效果很好。谢谢:)
标签: c# wpf xaml data-binding datagrid