3

コンボボックスがあり、AccountType クラスを使用してリストにデータが入力され、リストに適切にデータが入力されています。

ただし、選択したアイテムのプロパティをクラス アカウントである選択したアカウントにバインドすると。ページの読み込み時に、選択したアイテムが更新されません。テキストボックスなどの他のすべてのコントロールが更新されています。

どんな助けでも大歓迎です。

意見

ComboBox ItemsSource="{Binding AllAccountTypes}" DisplayMemberPath="AccountTypeName" 
  SelectedValuePath="AccountTypeName" SelectedItem="{Binding SelectedAccount}" />

AccountType クラス

public class AccountType:IAccountType
{
    public string AccountTypeName { get; set; }
}

アカウント クラス

public class Account: IAccount
{
    public int AccountNo { get; set; }
    public string AccountName { get; set; }
    public string AccountTypeName { get; set; }
    public int SubAccount { get; set; }
    public string Description { get; set; }
    public double Balance { get; set; }
    public string Note { get; set; }
    public bool Active { get; set; }

}

ViewModel で選択したアカウント

    public IAccount SelectedAccount { get { return selectedAccount; }
        set { selectedAccount = value;  }
    }
4

2 に答える 2

0

まず、のイベントをViewModel発生させる必要があります。PropertyChangedINotifyPropertyChanged

次に、バインディングで双方向バインディングを指定する必要があります。

<ComboBox ItemsSource="{Binding AllAccountTypes}" DisplayMemberPath="AccountTypeName" 
  SelectedValuePath="AccountTypeName" SelectedItem="{Binding SelectedAccount, Mode=TwoWay}" />

しかし 3 番目に、ここでの主な問題は、コンボ ボックスが AccountTypes のリスト (つまりIAccountType) にバインドされているにもかかわらず、選択した項目をIAccount. IAccountしかし、 には typeのプロパティはありませんIAccountType

そのため、SelectedItem を IAccountType プロパティにバインドするか、SelectedValue を ViewModel の文字列プロパティにバインドする必要があります。例えば:

<ComboBox ItemsSource="{Binding AllAccountTypes}" DisplayMemberPath="AccountTypeName"   
 SelectedItem="{Binding SelectedAccountType, Mode=TwoWay}"  />

ViewModel には、バインドするプロパティがあります。

public IAccountType SelectedAccountType
{
    get { return selectedAccountType; }
    set
    {
        if (Equals(value, selectedAccountType)) return;
        selectedAccountType = value;
        OnPropertyChanged("SelectedAccountType");
    }
}
于 2013-10-28T15:50:45.800 に答える