gpt4 book ai didi

wpf - MVVM 实现 : Changes to selected item propogate to list, 的问题不希望那样

转载 作者:行者123 更新时间:2023-11-30 23:47:29 27 4
gpt4 key购买 nike

所以我遇到了这个问题,希望你能帮忙。

我正在使用 MVVM Light 作为框架编写 WPF 应用程序。在这种情况下,我有一个项目列表,并且 SelectedItem 绑定(bind)到一个详细信息 View ,用户可以在其中编辑项目。在这种情况下,有一个保存按钮用于显式保存数据。

我的问题是,当用户编辑数据时,更改会立即显示在列表中。如果用户取消,它会重置所选项目,但仍会更改。如何防止更改传播?

我试图实现一个克隆实现,但是一旦我这样做了,MVVM Light 的消息传递系统最终会进入一个循环,由于我一直在克隆对象而导致 StackOverflowException。同样,克隆实现也很丑陋。

关于如何正确执行此操作的任何想法?

编辑:

ListView 的基本 XAML:

    <DataGrid DataContext="{Binding SubJobTypes}"
ItemsSource="{Binding}"
SelectedItem="{Binding ElementName=Root, Path=DataContext.SelectedSubJobType, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}"/>
</DataGrid.Columns>
</DataGrid>

编辑 View 的基本 XAML:
   <StackPanel>
<StackPanel>
<StackPanel Orientation="Horizontal" DataContext="{Binding Path=CurrentSubJobType}">
<TextBlock Text="Name"/>
<TextBox Text="{Binding Path=Name, Mode=TwoWay}" Width="150"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Button Content="{Binding Path=SubmitCommandText, FallbackValue=Submit}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding Path=SaveSubJobTypeCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="Cancel" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding Path=CancelCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="Delete">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding Path=DeleteCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</StackPanel>
</StackPanel>

ViewModel 是标准的,不会打扰发布

最佳答案

您应该有两个 View 模型,一个用于列表项,一个用于详细 View ,而不是禁用绑定(bind)机制。一旦选择了一个项目, ListView 模型就会发送一个属性更改的消息。详细 View 模型然后加载项目数据,或克隆模型并使用数据初始化自身。现在详细 View 模型可以更改其模型的本地实例。

完成后,数据将保存到数据库中,详细 View 模型会发送一条消息,表明项目已更改。 ListView 模型现在接收到消息并可以使用模型来更改其项目 View 模型,或者您可以从数据库重新加载项目模型,然后更新项目 View 模型。

这样你就不必手动将值写入模型,如果你只克隆模型,你不应该遇到任何消息传递问题。

关于wpf - MVVM 实现 : Changes to selected item propogate to list, 的问题不希望那样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6457684/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com