[英]Connecting a C# Array to a WPF Control 2-way
我有一個名為accounts(字符串帳戶,int值)的結構,還有一個名為person的類,它具有帳戶的數組列表(在C#中)。
我需要用戶點擊主窗口上的一個按鈕,並讓它彈出一個帶有某些人員的列表框(或其他控件)。帳戶(根據某些條件,它會有所不同,不想將我的問題埋在其中)代碼,當我需要的只是一個示例時),讓列表框同時顯示帳戶和值(因此整個結構,而不僅僅是帳戶號,例如“ 10456786 $ 75.50”),讓用戶雙擊其中的一個帳戶列表框並執行邏輯以更改該特定帳戶的person.account.value的值(遞增或遞減,我有這種邏輯,我只是不知道如何連接它們)。
我已經為此花了一個星期的時間,研究了我設法搜集的所有書籍(WPF的新手,自學),但無法完成這項工作。 我有這些碎片,但沒有如何連接它們。
不必一定是Listbox,在這一點上我願意接受建議,但我才剛剛弄清楚如何做到這一點。
預先感謝您的耐心和考慮。
我建議使用ObservableCollections而不是ArrayLists,因為它們會在更改時提供通知,並且您的UI也會相應更新。
然后,您可以這樣做:
帳戶:
public struct Account
{
public string AccountNo { get; set; }
public double Amount { get; set; }
}
人:
public class Person : INotifyPropertyChanged
{
public Person()
{
Accounts.Add(new Account { AccountNo = "12345", Amount = 79.50 });
Accounts.Add(new Account { AccountNo = "23456", Amount = 19.40 });
Accounts.Add(new Account { AccountNo = "34567", Amount = 5.60 });
Accounts.Add(new Account { AccountNo = "45678", Amount = 109.14 });
}
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name == value)
return;
_name = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
private List<Account> _accounts = new List<Account>();
public List<Account> Accounts
{
get { return _accounts; }
set
{
if (_accounts != value)
{
_accounts = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Accounts"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
使用某種ListBox ItemTemplating,例如
<ListBox ItemsSource="{Binding People}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Name}" />
<ListBox ItemsSource="{Binding Accounts}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding AccountNo}" />
<TextBlock Text="{Binding Amount}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock Text="{Binding Amount}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Wpf在綁定上運行得最好。 為了使綁定生效,您需要通知基礎屬性。 因此,請嘗試在結構屬性周圍添加包裝器(ModelView?),並提供可通知的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.