属性更改时的UserControl火灾事件

狗仔队

DocField具有公共布尔属性,IsSelected
DocField实现INotifyPropertyChanged

我需要一个在更改UserControlDocFieldBaseB触发的事件DocField.IsSelected

我怎么做?

public partial class UserControlDocFieldBaseB : UserControl
{
    private DocField docField = null;

    public UserControlDocFieldBaseB(DocField DocField)
    {
        InitializeComponent();
        docField = DocField;
    }

根据dkozl的评论,这就是我将其连接起来的方式
UserControlDocFieldString相当昂贵,因此我只想按需加载它

我怀疑我可以使用Loaded事件而不是UserControl1_DataContextChanged,但这似乎可以正常工作
它也可以与Loaded事件一起使用

public UserControlDocFieldBaseB()
{
    InitializeComponent();
    DataContextChanged += new DependencyPropertyChangedEventHandler(UserControl1_DataContextChanged);
}
void UserControl1_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    if (sender is UserControlDocFieldBaseB)
    {
        UserControlDocFieldBaseB uc = (UserControlDocFieldBaseB)sender;
        if (uc.DataContext is DocFieldString)
        {
            if (docFieldString == null)
            {
                docFieldString = (DocFieldString)uc.DataContext;
                docFieldString.PropertyChanged += DocFieldString_PropertyChanged;
            } 
        }
    }
}
void DocFieldString_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    switch (e.PropertyName)
    {
        case "IsSelected":
            //MessageBox.Show(docFieldString.Name + " docFieldString.IsSelected " + docFieldString.IsSelected.ToString());
            if (userControlDocFieldString == null && docFieldString != null && docFieldString.IsSelected)
            {
                userControlDocFieldString = new UserControlDocFieldString(docFieldString);
                this.frmEdit.Content = userControlDocFieldString;
            }
            break;
    }
}
dkozl

由于可以DocField实现属性的实现INotifyPropertyChanged,因此IsSelected您可以简单地订阅的PropertyChanged事件DocField,例如,在加载控件或DocField更改属性时,如果它是针对`IsSelected属性的,则继续传递该事件

private void PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (String.IsNullOrEmpty(e.PropertyName) || e.PropertyName == "IsSelected")
    {
        //pass on the event
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

属性更改时的UserControl火灾事件

来自分类Dev

属性更改时如何刷新由GDI +创建的UserControl

来自分类Dev

实际未更改时如何触发属性更改事件

来自分类Dev

字段更改时MVVM对象触发属性更改事件

来自分类Dev

外部类中的属性更改时,C#引发事件

来自分类Dev

依赖项属性更改时未引发WPF事件

来自分类Dev

属性更改时无法执行 Checked 事件

来自分类Dev

列表更改时的事件

来自分类Dev

jQuery UI火灾更改事件以编程方式进行?

来自分类Dev

当元素更改其类时发生火灾事件

来自分类Dev

jQuery UI火灾更改事件以编程方式进行?

来自分类Dev

IndexedDb更改时触发事件?

来自分类Dev

上传列表更改时的事件

来自分类Dev

字段更改时捕获事件

来自分类Dev

在 url 更改时加载事件

来自分类Dev

在事件更改时禁用按键事件

来自分类Dev

火灾事件的背景变化

来自分类Dev

图像src更改时的jQuery更改事件

来自分类Dev

属性更改时,聚合物元素不会触发“ on- <property> -changed”事件

来自分类Dev

WPF在属性更改时通知内容更改

来自分类Dev

窗口更改时如何触发事件?

来自分类Dev

哈希位置更改时如何触发事件

来自分类Dev

img src更改时触发事件

来自分类Dev

窗口innerWidth大小更改时的AngularJS事件

来自分类Dev

val()更改时的JS触发事件

来自分类Dev

标签文本更改时如何触发事件

来自分类Dev

在事件更改时更新变量jquery

来自分类Dev

z顺序更改时Winform控制事件

来自分类Dev

val()更改时的JS触发事件