亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

動態 ViewModel 的綁定值在 WPF 中變為空

動態 ViewModel 的綁定值在 WPF 中變為空

C#
波斯汪 2022-12-31 10:27:02
我按照一些在線教程在 ListView 的動態視圖之間切換。在我的主窗口中,我在左窗格中有一個 ListView,其中包含子 ViewModel 列表的 ItemsSource。(每個子 ViewModel 實現一個接口)每個 ViewModel 都有自己的視圖作為數據模板。我正在從 MainWindow 調用所選視圖的 GenerateReport() 方法。但是所選視圖的值變為空。從Github下載我的源代碼。重現問題的步驟:運行應用程序并在學生報告的 ID 和名稱中鍵入文本。(StudentReportViewModels 屬性中的斷點正確命中并更新了值。)然后單擊生成報告按鈕。StudentReportViewModels 的屬性值變為空。如何解決這個問題?請幫忙。來源:MainWindow.xaml<Window.Resources>    <DataTemplate DataType="{x:Type vm:StudentsReportViewModel}">        <view:StudentsReport/>    </DataTemplate>    <DataTemplate DataType="{x:Type vm:MarksReportViewModel}">        <view:MarksReport />    </DataTemplate></Window.Resources><Window.DataContext>    <local:MainWindowViewModel/></Window.DataContext><Grid>    <Grid.ColumnDefinitions>        <ColumnDefinition Width="200"/>        <ColumnDefinition Width="Auto"/>        <ColumnDefinition Width="*"/>    </Grid.ColumnDefinitions>    <ListView ItemsSource="{Binding Reports}" SelectedItem="{Binding SelectedReport, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">        <ListView.ItemTemplate>            <DataTemplate>                <TextBlock Text="{Binding Name}"/>            </DataTemplate>        </ListView.ItemTemplate>    </ListView>    <GridSplitter Grid.Row="1" Grid.Column="1" Width="5" ResizeBehavior="PreviousAndNext" HorizontalAlignment="Stretch"/>    <Grid Grid.Column="2">        <Grid.RowDefinitions>            <RowDefinition Height="2*"/>            <RowDefinition Height="Auto"/>        </Grid.RowDefinitions>        <ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">            <ContentControl Content="{Binding SelectedReport.ViewModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />        </ScrollViewer>        <Button Content="Generate Report" Grid.Row="2" Margin="5" HorizontalAlignment="Right" Command="{Binding GenerateReportCommand}"/>    </Grid></Grid>
查看完整描述

1 回答

?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

您的 StudentsReport.xaml UserControl 綁定到在 XAML 中創建的 StudentsReportViewModel 實例:


<UserControl.DataContext>

    <vm:StudentsReportViewModel/>

</UserControl.DataContext>

然而,“生成報告”按鈕正在調用在 MainWindowVieModel 構造函數中創建并存儲在 Report 類中的 StudentsReportViewModel 的另一個實例。


Reports = new List<Report>

{

    new Report{ Name = "Students Report", ViewModel = new StudentsReportViewModel()},

    new Report{ Name = "Marks Report", ViewModel = new MarksReportViewModel()}

};

您需要刪除其中一個實例,以便將 UserControl 的 DataContext 綁定到您從中生成報告消息的同一視圖模型實例。我建議從 StudentsReport.xaml 中刪除這段代碼:


<UserControl.DataContext>

    <vm:StudentsReportViewModel/>

</UserControl.DataContext>


查看完整回答
反對 回復 2022-12-31
  • 1 回答
  • 0 關注
  • 155 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號