TextBox не будет отображать содержимое связанного статического элемента общего списка - PullRequest
0 голосов
/ 06 декабря 2011

В WPF у меня есть статический объект «Клиент» в определении для MainWindow.xaml.cs.У этого клиента есть общедоступное строковое свойство Name.В выражении смесь 4 я нажимаю на поле «Дополнительные параметры» рядом со свойством «Текст» для TextBox, которое я хотел бы привязать к имени клиента.Затем я нажимаю «Связывание данных ...» -> «Свойство элемента» -> «Окно» в разделе «Элементы сцены» -> щелкните стрелку разворачивания рядом с «ActiveCustomer» ->, затем нажмите «Имя» -> «ОК».Привязка относится только к TextBox, доступному только для чтения, поэтому в качестве значения по умолчанию допустима привязка One Way.Но когда я запускаю свое приложение, оно не отображает имя клиента.Есть предложения?

<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.xaml.cs, клиент определяется как открытый объект Customer:

public Customer ActiveCustomer
{ get; set; }

1 Ответ

2 голосов
/ 06 декабря 2011

Вы не можете привязать статические свойства, как вы можете привязать свойства экземпляра. Свойство ActiveCustomer тогда не существует в элементе с именем window, оно существует в классе MainWindow. Вы должны быть в состоянии исправить привязку, используя Source в сочетании с x:Static:

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

Обратите внимание, что x:Static имеет очень специфический синтаксис, он не допускает произвольный путь или тому подобное.

Даже если привязка работает, это проблематично, поскольку вы не можете реализовать INPC для статических свойств, поэтому, если вы назначите новый объект для ActiveCustomer, не будет обновить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...