C# 获取从对象到其他对象的引用

C# 获取从对象到其他对象的引用,c#,wpf,C#,Wpf,以下是我的代码块: class MyClass: INotifyPropertyChanged { ClearPendingBill cpb; public ClearPendingBill CPB { get { return cpb; } set { cpb = value; RaisePropertyChanged("CPB"); } }

以下是我的代码块:

class MyClass: INotifyPropertyChanged
{
     ClearPendingBill cpb;
     public ClearPendingBill CPB
     {
        get { return cpb; }
        set
        {
            cpb = value;
            RaisePropertyChanged("CPB");
        }
     }
}

public partial class ClearPendingBill : UserControl, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    protected bool SetField<T>(ref T field, T value, string propertyName)
    {
        if (EqualityComparer<T>.Default.Equals(field, value)) return false;
        field = value;
        OnPropertyChanged(propertyName);
        return true;
    }

    double _selected_pending_amt = 0;
    public string SelectedPendingAmount
    {
        get { return "₹ " + string.Format("{0:0,0.00}", _selected_pending_amt); }
        set
        {
            SetField(ref _selected_pending_amt, Convert.ToDouble(value), "SelectedPendingAmount");
        }
    }
}
class MyClass:INotifyPropertyChanged
{
票据中央处理器;
公共票据
{
获取{return cpb;}
设置
{
cpb=值;
RaisePropertyChanged(“CPB”);
}
}
}
公共部分类ClearPendingBill:UserControl,INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
受保护的虚拟void OnPropertyChanged(字符串propertyName)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(handler!=null)handler(这是新的PropertyChangedEventArgs(propertyName));
}
受保护的布尔设置字段(参考T字段、T值、字符串属性名称)
{
if(EqualityComparer.Default.Equals(字段,值))返回false;
字段=值;
OnPropertyChanged(propertyName);
返回true;
}
双倍(已选)(待决)金额=0 ;;
公共字符串SelectedPendingAmount
{
获取{return“₹ " + string.Format(“{0:0,0.00}”,_selected_pending_amt);}
设置
{
设置字段(参考所选待决金额,转换为双(值),“所选待决金额”);
}
}
}

在上面的代码中,ClearPendingBill的对象是在MyClass内部创建的。是否有可能从ClearPendingBill对象引用MyClass对象?

当然有,您必须在构造时传递它,或者在
ClearPendingBill
上通过其他方法传递它

如果你写:

ClearPendingBill cpb = new ClearPendingBill(this);
它会给它一个对所属对象的引用(当然你需要一个构造函数来处理它)。MyClass上的静态方法总是可以访问的(只要它们是公共的)


但是,正如所写的那样,无法获取所属对象。

没有反向引用是不行的,因为该对象可能包含多个(或没有)对象


我假设您想通知包含类某个属性已更改。一种方法是让
MyClass
ClearPendingBill
类的
PropertyChanged
事件添加一个处理程序。

我已编辑了您的标题。请参见“”,其中一致意见是“不,他们不应该”“.Unrelated:您的UserControl不应实现
INotifyPropertyChanged
。奇怪-为什么需要这样做?为了什么目的?我的实际代码非常大和复杂。在这个问题中,我只放了很少的东西。你的UI类应该引用一个数据类,而不是相反。哦,非常感谢!!我应该想到这一点:)