为了账号安全,请及时绑定邮箱和手机立即绑定

C# WPF MVVM - 如何填充 ObservableCollection 然后稍后在列表视

C# WPF MVVM - 如何填充 ObservableCollection 然后稍后在列表视

C#
慕的地6264312 2022-07-10 10:14:13
所以,我有一个 mainviewmodel 和一个 secondviewmodel,我的 ObservableCollection 在 secondviewmodel 中,但是我想从 mainviewmodel 填充它,然后在程序的稍后部分我想加载一个带有列表视图的弹出窗口,该列表视图具有从之前加载的数据。我不想在视图中的列表中添加数据。我一直在考虑这个问题,直到现在我才在打开它时添加来自 secondviewmodel 显示的数据。XAM1<Grid Background="Gainsboro" >    <Grid.DataContext>        <vm:AdminViewModel/>    </Grid.DataContext>    <Grid.RowDefinitions>        <RowDefinition Height="100" />        <RowDefinition Height="*" />    </Grid.RowDefinitions>    <Grid.ColumnDefinitions>        <ColumnDefinition Width="auto"/>        <ColumnDefinition Width="*"/>        <ColumnDefinition Width="auto"/>    </Grid.ColumnDefinitions>    <Button Grid.Row="0" Command="{Binding GenerateCommand}"  Grid.Column="2" Height="30" Width="55" x:Name="btnGenerate" Margin="5,5,5,0" FontSize="8.5" VerticalAlignment="Top" HorizontalAlignment="Center" Content="Generate"/>    <StackPanel Grid.Row="1" Grid.Column="0">            <Border   BorderThickness="1" BorderBrush="Black">                <Grid DataContext="{Binding}" Width="300" Height="300" Background="Gainsboro" Margin="0">                    <Grid.RenderTransform>                        <RotateTransform x:Name="theTransform" />                    </Grid.RenderTransform>                    <Button Width="50" Height="50" HorizontalAlignment="Left" Command="{Binding AbortCommand, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" VerticalAlignment="Bottom" Content="Abort"/>
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

您正在此行中创建视图模型的另一个实例:(删除此)


<TreeView.DataContext>

    <vm:ReportViewModel/>

</TreeView.DataContext>

您应该做的是改为读取视图模型的现有实例:(添加此)


<TreeView DataContext="{Binding Rvm}">

显然你需要有一个公共财产才能ReportViewModel让它AdminViewModel工作:(添加这个)


public ReportViewModel Rvm { get { return rvm; } }

编辑

您需要Rvm这样定义,因为绑定源必须是public property


您不需要通知Rvm(以及 3 个集合)的更改,因为您只在构造函数中设置它们的值,以后再也不会更改它们。


一个好的做法ObservableCollection是从以下代码中创建一个片段:


private ObservableCollection<string> warning = new ObservableCollection<string>();

public ObservableCollection<string> Warning { get { return warning; } }


查看完整回答
反对 回复 2022-07-10
  • 1 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号