【问题标题】:UserControl Binding only working in constructor [duplicate]UserControl绑定仅在构造函数中工作[重复]
【发布时间】:2023-04-06 19:30:01
【问题描述】:

我正在尝试将UserControl 绑定到我的代码中的属性。 绑定在构造函数中有效,但是当我在按下按钮后尝试为属性分配另一个值时,UserControl 不会改变它的值。

XAML:

<UserControl Content="{Binding MainDock, UpdateSourceTrigger=PropertyChanged}"/>  

绑定的属性:

public UserControl MainDock { get; set; }

构造函数:

public DBControl()
{
  InitializeComponent();

  this.DataContext = this;

  MarkerControl mc = new MarkerControl();
  MainDock = mc;
}

按钮方法:

private void ShowItemsToPrint(object sender, RoutedEventArgs e)
{
  ItemsToPrintControl sitp = new ItemsToPrintControl();
  MainDock = sitp;
}

【问题讨论】:

  • MainDock 不会引发 PropertyChanged 事件,也不会从您提供的代码中实现 INotifyPropertyChanged。
  • 请注意,设置UpdateSourceTrigger=PropertyChanged 是没有意义的。它仅在 TwoWay 或 OneWayToSource 绑定中有效。

标签: c# wpf binding user-controls


【解决方案1】:

你需要打电话给OnPropertyChanged():

public class MyObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private UserControl _MainDock;
    public UserControl MainDock
    {
        get { return _MainDock; }
        set
        {
            _MainDock = value;
            OnPropertyChanged(nameof(MainDock));
        }
    }

    protected void OnPropertyChanged(string name)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }
}

【讨论】:

  • UpdateSourceTrigger=PropertyChanged 与 PropertyChanged 事件无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 2017-07-26
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多