【问题标题】:WPF Binded list is updated from datagrid but I don't want itWPF 绑定列表是从数据网格更新的,但我不想要它
【发布时间】: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


【解决方案1】:

正如 sa_ddam213 和 Mike Schartz 所说,您将相同的列表传递到第二个窗口,或者我可以读到您想要一份此列表的副本。

只需初始化另一个列表并使用 mesBagnoles 的值影响它。

【讨论】:

    猜你喜欢
    • 2017-11-26
    • 1970-01-01
    • 2013-06-17
    • 2014-08-06
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2013-07-27
    • 2011-09-28
    相关资源
    最近更新 更多