c# - 数据绑定(bind)到文本框并在整个项目中共享对象

标签 c# wpf xaml mvvm

我在更新绑定(bind)文本框时遇到了困难。我还是 WPF 开发的新手,我一定错过了一个基本概念,因为此时我已经阅读了互联网上几乎所有可用的内容,但我仍然感到困惑。下面是我的代码。首先,概述我正在做什么以更好地为我的问题设置上下文。

Mainwindow 是一个包含使用框架源标签加载各种页面的选项卡的窗口。我相信这可能会给我带来问题,因为我不确定每个选项卡的实际对象在哪里被实例化,只是 XAML 正在加载。

Scratchpad 是一个包含文本框的类,几乎所有执行任何类型的操作以报告状态和任何错误的类都将更新和使用该文本框。

文本框 XAML(在“ScratchPad_View.xaml”中作为上下文)

<TextBox x:Name="scratchMessage" 
             Text="{Binding Path=ScratchMessage, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
             HorizontalAlignment="Right" 
             Height="300" 
             Width ="500" 
             TextWrapping="Wrap" 
             VerticalAlignment="Top"/>

XAML 背后的代码
public partial class ScratchPad : Page
{
    public ScratchPad()
    {
        InitializeComponent();
        ScratchPad_Model ScratchPad_Model = new ScratchPad_Model();
        this.DataContext = ScratchPad_Model;
    }
}

模型实现
class ScratchPad_Model : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public string _scratchMessage;
    public string ScratchMessage;
    {
        get
        {
            return _scratchMessage;
        }
        set
        {
            if (value != _scratchMessage)
            {
                _scratchMessage = value;
                OnPropertyChanged("ScratchMessage");
            }
        }
    }
    // Create the OnPropertyChanged method to raise the event 
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

我通过对 StackOverflow 上的其他问题的回复和阅读大量数据绑定(bind)教程拼凑了其中的大部分内容,但它仍然没有点击。我不确定如何更新文本框的内容,并且由于我正在加载包含主窗口 XAML 中的文本框的页面,因此我什至不确定我是否引用了正确的对象。主窗口在一个框架标签中加载此页面,复制如下。
<Frame Source="Common/View/ScratchPad_View.xaml" ></Frame>

在此 XAML 背后的代码中,我有以下内容。
public partial class MainWindow
{
    // Create scratchpad object for logging and status display
    ScratchPad scratchPad = new ScratchPad();

    public MainWindow()
    {
        InitializeComponent();
    }

    private void StartVault(object sender, RoutedEventArgs e)
    {
        // Creates the authentication prompt view object and pass the scratchPad reference for reporting
        authPrompt_View _authPrompt_View = new authPrompt_View(scratchPad);
    }
}

我将在主窗口初始化中创建的 ScratchPad 对象的引用传递给所有类,以便它们可以更新文本框的内容,但是我没有太多运气让绑定(bind)工作。一旦它工作,我仍然不太确定我应该如何将文本附加到文本框。这里可能存在很多问题,但我希望解决我的一些概念问题并更好地理解我做错了什么,提前谢谢!

最佳答案

您可以使用 Application.Properties 为您的项目设置全局属性。因此,可能在文本框绑定(bind)变量的 SETTER 方法(在您的情况下为 ScratchMessage)中,您需要在全局应用程序属性集合中设置属性。

下面的链接很好地解释了它:
https://msdn.microsoft.com/en-us/library/aa348545(v=vs.100).aspx
http://www.c-sharpcorner.com/Resources/842/application-properties-in-wpf-and-c-sharp.aspx

关于c# - 数据绑定(bind)到文本框并在整个项目中共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44036053/

相关文章:

c# - 构建将两个函数组合成一个复合函数的表达式树

c# - 如何检索点击的 ListView 行数据和隐藏 id 列

c# - 如何将外部 Xaml 页面链接到通用 Windows 平台中的网格?

c# - 通用 Windows 应用程序中的投影效果

c# - 将小数值四舍五入到最接近的 0.01?

c# - C# 中更快的字符串比较

c# - WPF 数据绑定(bind)不显示

c# - 在功能区控件上绘制窗口按钮

c# - wpf 数据网格定制(边框、单元角等)

c# - 如何在 Azure WebApp 上将 mp3 解码为 wav