文本框将不显示绑定静态泛型列表项的内容

本文关键字:列表 泛型 静态 显示 绑定 文本 | 更新日期: 2023-09-27 18:16:48

在WPF中,我在MainWindow.xaml.cs的定义中有一个静态的"Customer"对象。该客户具有可公开访问的字符串Name属性。在表达式blend 4中,我单击想要绑定到客户名称的TextBox的"Text"属性旁边的"Advanced Options"框。然后点击"数据绑定…"->"元素属性"->"场景元素"下的"窗口"->单击"ActiveCustomer"旁边的展开箭头->然后单击"名称"->"确定"。绑定到一个只读的TextBox,所以单向绑定是可以接受的默认值。但当我运行我的应用程序时,它不显示客户的名字。有什么建议吗?

<TextBox x:Name="AIAHNameTextBox" Height="26" Canvas.Left="90" TextWrapping="Wrap" Canvas.Top="8" Width="100" IsReadOnly="True" VerticalContentAlignment="Center" Text="{Binding ActiveCustomer.Name, ElementName=window, Mode=OneWay}" />

ActiveCustomer是Customer类的一个实例:

namespace WPFBankingSystem
{
    public enum CustomerStatus
    { Open, Closed }
    public enum TransferType
    { CheckingToSaving, SavingToChecking }
    [Serializable]
    public class Customer
    {
        private string address;
        private Checking chkAcc;
        private string name;
        private int pin;
        private Saving savAcc;
        private string ssn;
        private AccountStatus status;
        private string tel;
        public string Address
        {
            get { return address; }
            set { address = value; }
        }
        public Checking ChkAcc
        {
            get { return chkAcc; }
            set { chkAcc = value; }
        }
        public string Name
        { get { return name; } }
        public int Pin
        {
            get { return pin; }
            set { pin = value; }
        }
        public Saving SavAcc
        {
            get { return savAcc; }
            set { savAcc = value; }
        }
        public string Ssn
        { get { return ssn; } }
        public AccountStatus Status
        {
            get { return status; }
            set { status = value; }
        }
        public string Tel
        {
            get { return tel; }
            set { tel = value; }
        }
        public void create(string Name, string Address, string TelephoneNumber, string SSN, int PIN)
        {
            this.address = Address;
            this.name = Name;
            this.pin = PIN;
            this.ssn = SSN;
            this.status = AccountStatus.Open;
            this.tel = TelephoneNumber;
        }
        public void delete()
        {
            if (this.chkAcc != null)
            { chkAcc.close(); }
            if (this.savAcc != null)
            { savAcc.close(); }
        }
        public bool hasChkAcc()
        { return (this.chkAcc != null) ? true : false; }
        public bool hasSavAcc()
        { return (this.savAcc != null) ? true : false; }
        public void show()
        { }
        public void transfer(double Amount, TransferType Type)
        {
            if(this.hasChkAcc() && this.hasSavAcc())
            {
                switch(Type)
                {
                    case TransferType.CheckingToSaving:
                        this.chkAcc.Balance -= Amount;
                        this.savAcc.Balance += Amount;
                        break;
                    case TransferType.SavingToChecking:
                        this.savAcc.Balance -= Amount;
                        this.chkAcc.Balance += Amount;
                        break;
                }
            }
            else
            { throw new Exception("You do not have both a checking account and a saving account."); }
        }
        public Customer()
        { }
        ~Customer()
        { this.delete(); }
    }
}

在mainwindow . example .cs中,客户被定义为一个公共客户对象:

public Customer ActiveCustomer
{ get; set; }

文本框将不显示绑定静态泛型列表项的内容

你不能像绑定实例属性那样绑定静态属性。属性ActiveCustomer在命名为window的元素上不存在,它存在于类MainWindow中。您应该能够通过将Sourcex:Static结合使用来修复绑定:

{Binding Name, Source={x:Static local:MainWindow.ActiveCustomer}}

请注意,x:Static有一个非常特殊的语法,它不允许任意路径或类似的。

即使绑定工作,这也是有问题的,因为你不能为静态属性实现INPC,所以如果你给ActiveCustomer分配一个新对象,将不会有更新。