如何在运行时将值从窗口传递到用户控件?

Posted

技术标签:

【中文标题】如何在运行时将值从窗口传递到用户控件?【英文标题】:How to passing value from window to usercontrol at runtime? 【发布时间】:2017-11-16 01:23:17 【问题描述】:

这是我应该获取数据的用户控制代码:

这是我的主窗口,我在其中包含了用户控件并将值设置为属性:

这不起作用,因为该值始终为空。请帮助纠正我做错的任何事情。谢谢。

【问题讨论】:

从下一次开始发布实际代码而不是图像。 【参考方案1】:

UserControl 是在设置 GetMyValue 属性之前创建的。在创建实例之前,您不能设置实例的属性...

等到UserControl 被加载,你会得到预期的值:

public UserControl1()

    InitializeComponent();
    Loaded += (s, e) =>
    
        string finalValue = GetMyValue;
    ;

【讨论】:

谢谢.. 这就像一个魅力。虽然我很想知道使用这种方式更好还是@Marsh 显示的方式更好。使用这个或另一个有什么好处? 您无需将属性定义为依赖属性就可以获取它的值...【参考方案2】:

据我所知,您似乎需要使用依赖属性。这将替换您拥有的 GetMyValue 属性。

查看此示例以了解自定义依赖属性。

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

旁注:一种快速的制作方法是键入“propdp”,然后按两次制表符。然后按自己的方式进行设置。

【讨论】:

感谢您的链接,附注非常有帮助。我按照给定的代码进行操作,但是 OnSetTextChanged 是必要的吗?如何在没有 OnSetTextChanged 的情况下编辑代码。 除非您有需要更新的绑定,否则没有必要。要没有它,只需删除 ", new PropertyChangedCallback(OnSetTextChanged)。然后你就会有新的 " new PropertyMetaData("") 当我更改为new Property MetaData("") 时,我得到的结果总是空的。【参考方案3】:

1.确保您已将范围设置为“用户”而不是“管理员”,否则您将无权访问资源。 2.修改数据后确保有保存方法。

写作 使用 Properties.Settings;

Settings.Default.myProperty = myValue;
Settings.Default.Save();

阅读

String myValue = Settings.Default["myProperty"].ToString();

您还可以通过以下方式管理您的资产 解决方案探索 > 你的项目 > 属性 > Settings.settings

【讨论】:

【参考方案4】:

一个很好的解决方案:

private void Window_Loaded(object sender, RoutedEventArgs e)

    var control = new UserControl1();
    control.GetMyValue = "HelloWorld";
    grid1.Childern.Add(control);

还有其他解决方案,例如Binding DataContext 或自定义DependencyProperty

【讨论】:

【参考方案5】:

您需要创建依赖属性。没有什么难做的:

首先你需要注册:

public static readonly DependencyProperty GetMyValueProperty =
            DependencyProperty.Register("GetMyValue", typeof(string), 
            typeof(UserControl1), new UIPropertyMetadata(string.Empty));  

然后创建自动属性:

public string GetMyValue
        
            get  return (string )GetValue(GetMyValueProperty ); 
            set  SetValue(GetMyValueProperty , value); 
        

就是这样,只需将此示例复制到您的 UserControl1 类中即可。

【讨论】:

'UIPropertyMetadata(string.Empty)); 这行代码给我错误,我只能使用 PropertyMetadata...问题是每当我使用PropertyMetadata(string.Empty); 时,我得到的结果总是空的。

以上是关于如何在运行时将值从窗口传递到用户控件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从主传递到对话框

选择时将值从 TabBarController 传递给子视图控制器

在角度js中将值从一个控件传递到另一个控件[重复]

如何在同一页面内将值从 Js 传递到 PHP [重复]

WPF 将对象从窗口的用户控件传递到另一个窗口的用户控件

如何将值从主屏幕小部件传递给应用程序?