【问题标题】:View Model not updating查看模型未更新
【发布时间】:2021-09-26 12:14:18
【问题描述】:

我目前正在练习如何在 C# 上使用 WPF,我已经掌握了它的基础知识,但我遇到了一个问题,我设置了我的代码以在单击按钮时打开一个新窗口但是视图不会更新到窗口 2应该看起来它只是显示与 window1 相同的视图,但从一个窗口到另一个窗口的更改正在工作,只是内容没有改变。

窗口一cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace PROG6221_POE_Tarisai_Gonah_18028480
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

    

        private void OpenWindow(object sender, RoutedEventArgs e)
        {
            Task1 f1 = new Task1();
            this.Visibility = Visibility.Hidden;
            f1.Show();
        }
    }
}

窗口 2 cs:

using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace PROG6221_POE_Tarisai_Gonah_18028480
{
    /// <summary>
    /// Interaction logic for Task1.xaml
    /// </summary>
    public partial class Task1 : Window
    {
        public Task1()
        {
            InitializeComponent();
        }

        private void OpenWindow(object sender, RoutedEventArgs e)
        {
            //Expenses objexp = new Expenses();
            //this.Visibility = Visibility.Hidden;
            //objexp.Show();

            MainWindow f1 = new MainWindow();
            this.Visibility = Visibility.Hidden;
            f1.Show();


        }

        private void ButtonClick(object sender, RoutedEventArgs e)
        {

        }
    }
}

Window 1 xaml 和 window 2 xaml 完全不同,但是当我单击按钮时,它确实显示了 windows 2 设计。

窗口 1 xaml:

<Window x:Class="PROG6221_POE_Tarisai_Gonah_18028480.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:PROG6221_POE_Tarisai_Gonah_18028480"
        mc:Ignorable="d" FontSize="18"
        Title="Finance Savings Calculator" Height="550" Width="900">
    <Grid RenderTransformOrigin="0.529,0.484" Background="{DynamicResource {x:Static SystemColors.ActiveCaptionBrushKey}}" OpacityMask="{DynamicResource {x:Static SystemColors.ActiveCaptionBrushKey}}">

        <Grid.ColumnDefinitions>


            <ColumnDefinition Width="46*"/>
            <ColumnDefinition Width="0*"/>
            <ColumnDefinition Width="179*"/>


        </Grid.ColumnDefinitions>
        <TextBlock HorizontalAlignment="Left" Text="                                                    Welcome to the finance calculator" TextWrapping="Wrap" Width="900" FontSize="24" FontWeight="Bold" Margin="0,10,0,486" Foreground="Black" Background="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" Grid.ColumnSpan="3" FontFamily="Imprint MT Shadow" TextDecorations="{x:Null}"/>

        <Button Content="HOME" HorizontalAlignment="Center" VerticalAlignment="Top" Width="184" Height="38" Click="Button_Click" Background="#FF20D6FF" FontWeight="Bold" BorderBrush="{DynamicResource {x:Static SystemColors.InactiveCaptionTextBrushKey}}" Margin="0,48,0,0"/>


        <Button Content="Task 1" HorizontalAlignment="Center" VerticalAlignment="Top" Width="184" Height="38" Click="OpenWindow" Background="#FF20D6FF" FontWeight="Bold" Margin="0,118,0,0" Foreground="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}" BorderBrush="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}"/>
        <TextBlock Grid.Column="2" HorizontalAlignment="Left" Height="59" Margin="39,89,0,0" Text="This is a finance calculator. This app is designed to track your monthly expenses and income" TextWrapping="Wrap" VerticalAlignment="Top" Width="677" FontFamily="Arial Black"/>

    </Grid>
</Window>

窗口 2 xaml:

<Window x:Class="PROG6221_POE_Tarisai_Gonah_18028480.Task1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:PROG6221_POE_Tarisai_Gonah_18028480"
             mc:Ignorable="d" FontSize="18"
        Title="Finance Savings Calculator" Height="550" Width="900">
    <Grid RenderTransformOrigin="0.529,0.484" Background="{DynamicResource {x:Static SystemColors.ActiveCaptionBrushKey}}" OpacityMask="{DynamicResource {x:Static SystemColors.ActiveCaptionBrushKey}}">

        <Grid.ColumnDefinitions>


            <ColumnDefinition Width="46*"/>
            <ColumnDefinition Width="0*"/>
            <ColumnDefinition Width="179*"/>


        </Grid.ColumnDefinitions>
        <TextBlock HorizontalAlignment="Left" Text="                                                    Welcome to the finance calculator" TextWrapping="Wrap" Width="900" FontSize="24" FontWeight="Bold" Margin="0,10,0,486" Foreground="Black" Background="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" Grid.ColumnSpan="3" FontFamily="Imprint MT Shadow" TextDecorations="{x:Null}"/>

        <Button Content="HOME" HorizontalAlignment="Center" VerticalAlignment="Top" Width="184" Height="38" Click="OpenWindow" Background="#FF20D6FF" FontWeight="Bold" BorderBrush="{DynamicResource {x:Static SystemColors.InactiveCaptionTextBrushKey}}" Margin="0,48,0,0"/>


        <Button Content="Task 1" HorizontalAlignment="Center" VerticalAlignment="Top" Width="184" Height="38" Click="ButtonClick" Background="#FF20D6FF" FontWeight="Bold" Margin="0,118,0,0" Foreground="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}" BorderBrush="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}"/>
        <Rectangle Grid.Column="2" HorizontalAlignment="Center" Height="427" Stroke="Black" VerticalAlignment="Center" Width="696"/>
        <TextBox Grid.Column="2" HorizontalAlignment="Left" Margin="305,195,0,0" Text="TextBox" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <TextBox Grid.Column="2" HorizontalAlignment="Left" Margin="305,291,0,0" Text="TextBox" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <Label Content="Gross Income:" Grid.Column="2" HorizontalAlignment="Left" Margin="178,187,0,0" VerticalAlignment="Top"/>
        <Label Content="Tax:" Grid.Column="2" HorizontalAlignment="Left" Margin="261,287,0,0" VerticalAlignment="Top"/>
        <Button Content="Next" Grid.Column="2" HorizontalAlignment="Left" Height="33" Margin="261,408,0,0" VerticalAlignment="Top" Width="205" Background="{DynamicResource {x:Static SystemColors.ScrollBarBrushKey}}" Click="OpenWindow"/>

    </Grid>
</Window>

我被告知 INOTIFYPROPERTY 更改是缺少代码,但我完全不知道如何在我的代码中实现它。

【问题讨论】:

    标签: c# wpf user-interface view


    【解决方案1】:

    将Wall窗口作为参数发送到第二个窗口,在这里将Visibility属性设置为Visibile,如果Task1创建一次,则无需创建多个实例。

    更改的完整代码如下。

    将 MainWindow 更改为此:

    namespace PROG6221_POE_Tarisai_Gonah_18028480
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            Task1 f1;
            public MainWindow()
            {
                InitializeComponent();
            }
        
    
            private void OpenWindow(object sender, RoutedEventArgs e)
            {
                if(f1 == null)
                {
                   f1 = new Task1(this);
                   f1.Show();
                }
                else
                   f1.Visibility = Visibility.Visible;
                this.Visibility = Visibility.Hidden;
            }
        }
    }
    

    将 Task1 更改为:

    namespace PROG6221_POE_Tarisai_Gonah_18028480
    {
        /// <summary>
        /// Interaction logic for Task1.xaml
        /// </summary>
        public partial class Task1 : Window
        {
            MainWindow mainWindow;
            public Task1(MainWindow _mainWindow)
            {
                InitializeComponent();
                mainWindow = _mainWindow
            }
    
            private void OpenWindow(object sender, RoutedEventArgs e)
            {
                this.Visibility = Visibility.Hidden;
                mainWindow..Visibility = Visibility.Visible;
            }
    
            private void ButtonClick(object sender, RoutedEventArgs e)
            {
    
            }
        }
    }
    

    【讨论】:

    • 我已经实现了更改,但是我仍然遇到同样的错误,是不是我的 Visual Basic 有问题?
    • 我更改了第一个代码,您是否应用了这些更改?你得到了什么错误?
    • 还有一点就是你的代码没有viewmodel,是传统代码
    • 我实施了这些更改。当我运行项目时,当我单击按钮显示 Windows 2 窗口时,我得到的错误显示它确实更新以显示它,它显示主窗口。
    • 也许我很困惑自己在使用 WPF 时窗口和视图的工作方式是否相同?
    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2021-07-03
    相关资源
    最近更新 更多