将字符串或属性传递给 WPF Code Behind

Posted

技术标签:

【中文标题】将字符串或属性传递给 WPF Code Behind【英文标题】:Passing strings or properties to WPF Code Behind 【发布时间】:2022-01-11 18:31:33 【问题描述】:

我不知道如何将任何属性、字段或数据从我的主应用程序传递到 WPF 表单的“代码隐藏”中。

我正在尝试编写一个应用程序,让用户按照此示例从 WPF 表单中编辑一些 C# 参数:

https://www.tutorialspoint.com/wpf/wpf_data_binding.htm

该示例运行良好。唯一的问题是我不想将所有代码都放在表单的“代码隐藏”类中。程序必须做其他事情,它会有其他形式。

但我不知道如何将任何信息传递到后面的代码中。我什至在我的主应用程序中创建了一个公共静态字符串,但这似乎超出了 WPF 表单背后代码的范围。

(顺便说一句,我已经涉足 C# 编程很长一段时间了,但我仍然不了解很多更抽象的概念,例如部分类等。)

感谢您的帮助。

我的主要应用程序是 Revit 宏。这是带有公共静态字符串的主要应用程序代码:


using System;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
using System.Collections.Generic;
using System.Linq;
using System.Windows;

namespace WPF2021Test

    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.DB.Macros.AddInId("5973D9EF-F3DA-494B-9992-5636CB0DB94C")]
    public partial class ThisApplication
    
      ///Revit stuff left out
      public static string mycomment = "";
      public void Tutorial1()
        
            UIDocument uidoc = this.ActiveUIDocument;
            Document doc = this.ActiveUIDocument.Document;
            View pview = uidoc.ActiveView;
            Window2 win2 = new Window2 ();
            win2.Show();
        






    ```

And the code behind I tried:

    using System;
using System.Collections.Generic;
using System.Text;
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.Linq;


namespace WPF2021Test

    /// <summary>
    /// Interaction logic for Window2.xaml
    /// </summary>
    public partial class Window2 : Window 
    
        
        //The next line doesn't work
        Person person = new Person  Name = WPF2021Test.mycomment, Age = 26 ;
        
        public Window2()
        
            InitializeComponent();
            this.DataContext = person;
        
        
         private void Button_Click(object sender, RoutedEventArgs e)
         
         string message = person.Name + " is " + person.Age; 
         MessageBox.Show(message); 
         
         
    
        
    public class Person  
    
      private string nameValue;
        
      public string Name  
         get  return nameValue;  
         set  nameValue = value;  
       
        
      private double ageValue; 
        
      public double Age  
         get  return ageValue;  
                
         set  
            if (value != ageValue)  
               ageValue = value; 
             
          
       
    
        


 

【问题讨论】:

在这种情况下,“主应用程序”究竟是什么?能否请您出示您的代码? 它实际上是一个 Revit 宏。例如,这里是公开的代码:Hmmm....无法弄清楚如何将代码添加到评论中,我找不到回复的方法。我会尝试将代码添加到原始帖子中。 你想用公共静态字符串做什么? 我试图将它传递给后面的代码。 通过?如何?同样,您需要包含演示您正在尝试做什么的代码。 【参考方案1】:

问题是,您已经决定将您的视图与“Person”的 DataContext 连接起来。

问题是你想做什么? 为什么将 DataContext 与 person 连接,然后使用后面的代码?这似乎没有意义。

请提供一些用例,为什么你甚至想连接后面的代码。

【讨论】:

以上是关于将字符串或属性传递给 WPF Code Behind的主要内容,如果未能解决你的问题,请参考以下文章

如何将对象(或关联数组)作为属性值传递给我的 Web 组件

如何将键盘导航焦点传递给 WPF 中生成的 xaml?以及如何退货?

包装或扩展 angular-material 组件,允许将未知属性传递给子组件

剃须刀页面,如何将 json 序列化字符串传递给模型属性

OOP:将对象与将属性传递给方法

在代码隐藏文本块中绑定字符串属性