gpt4 book ai didi

c# - 使用 Mvvm、Wpf、C#、Visual Studio 在 TextBox 文本更改上关闭 Windows

转载 作者:行者123 更新时间:2023-12-03 10:42:06 25 4
gpt4 key购买 nike

我想在 TextChange 事件和特定文本上执行一个方法,我想做一些事情并使用 MVVM 关闭窗口

例如,在我的代码的这一部分,我想关闭我的窗口:

if (text.Equals("12345"))
{
//Exit from window
}

我知道如何使用命令从按钮执行此操作,正如我在下一个示例的代码中所做的那样。

但是如何将窗口传递给绑定(bind)到文本框文本的运行属性?

还是有另一种关闭表格的方法?

我想在 ViewModel 上而不是后面的代码来编写我的代码作为 MVVM 模式关闭,我可以

我的 XAML 代码:
<Window x:Class="PulserTesterMultipleHeads.UserControls.TestWindows"
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:PulserTesterMultipleHeads.UserControls"
mc:Ignorable="d"
Name="MainTestWindow"
Title="TestWindows" Height="450" Width="800">
<Grid>
<StackPanel>

<TextBox Text="{Binding Text,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>

<Button Command="{Binding EndTestExit}"
CommandParameter="{Binding ElementName=MainTestWindow}">Exit</Button>
</StackPanel>
</Grid>
</Window>

XAML 背后的代码:
using PulserTesterMultipleHeads.Classes;
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.Shapes;

namespace PulserTesterMultipleHeads.UserControls
{
/// <summary>
/// Interaction logic for TestWindows.xaml
/// </summary>
public partial class TestWindows : Window
{
public TestWindows()
{
InitializeComponent();
DataContext = new TestWindowsMV();
}
}
}

查看型号代码:
using PulserTester.ViewModel.Base;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;

namespace PulserTesterMultipleHeads.Classes
{
public class TestWindowsMV : INotifyPropertyChanged
{
private string text;
public string Text {
get {
return text;
} set {
text = value;
if (text.Equals("12345"))
{
//Exit from window
}

}
}


/// <summary>
/// for the example
/// </summary>
private ICommand _EndTestExit;

public ICommand EndTestExit
{
get
{
if (_EndTestExit == null)
{
_EndTestExit = new GenericRelayCommand<Window>((window) => EndTestExitAction(window));
}
return _EndTestExit;
}
}

private void EndTestExitAction(Window window)
{
window.Close();
}


public event PropertyChangedEventHandler PropertyChanged;
}
}

************************* 编辑为答案 ********************* *******
ModelView 的变化:
public string Text {
get {
return text;
} set {
text = value;
if (text.Equals("12345"))
{
CloseAction();
}

}
}

后面代码的变化:
public TestWindows()
{
InitializeComponent();
DataContext = new TestWindowsMV();

if (((TestWindowsMV)DataContext).CloseAction == null)
((TestWindowsMV)DataContext).CloseAction = new Action(this.Close);

}

最佳答案

使用 MVVM 有点困难,但您可以做的是在 ViewModel 中创建一个事件并附加一个函数,该函数将在您的 View 后面的代码中关闭您的窗口。然后,您将能够在需要关闭窗口时在 ViewModel 中调用您的事件(或者在 View 中而不是在 ViewModel 中执行其他更方便的操作)

关于c# - 使用 Mvvm、Wpf、C#、Visual Studio 在 TextBox 文本更改上关闭 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55707075/

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