文本框将不显示绑定静态泛型列表项的内容
本文关键字:列表 泛型 静态 显示 绑定 文本 | 更新日期: 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
中。您应该能够通过将Source
与x:Static
结合使用来修复绑定:
{Binding Name, Source={x:Static local:MainWindow.ActiveCustomer}}
请注意,x:Static
有一个非常特殊的语法,它不允许任意路径或类似的。
即使绑定工作,这也是有问题的,因为你不能为静态属性实现INPC
,所以如果你给ActiveCustomer
分配一个新对象,将不会有更新。