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

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

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

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

【问题讨论】:

  • 从下一次开始发布实际代码而不是图像。

标签: c# wpf silverlight


【解决方案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); 时,我得到的结果总是空的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多