簡體   English   中英

將C#陣列連接到WPF控件2路

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM