0

私は WPF アプリケーションを持っており、MVVM 設計アプローチを使用しています。

以下のクラス Transaction のリストを保持する ObservableObject があります。

public Transaction
{
    public string Ammount;
    public string Direction;
}

私のViewModelのObservableObjectは以下です

public ObservableCollection<Transactions> ListOfUserTransactions
        {
            get { return _localTransactionData; }
            set
            {
                _localTransactionData = value;
                RaisePropertyChanged("ListOfUserTransactions");
            }
        }

そして、私の見解はこのように拘束されます。

<DataGrid ItemsSource="{Binding ListOfUserTransactions}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Ammount" Binding="{Binding Path=Ammount}"  Foreground="Black" IsReadOnly="True" />

                <DataGridTextColumn Header="Direction" Binding="{Binding Path=Direction}" Foreground="Black" IsReadOnly="True" />
            </DataGrid.Columns>
</DataGrid>

これは、生成された行数が私が期待していたものと同じであるが、すべての行が空であるように機能します.DataGridTextColumnをバインドしている方法だと思いますが、どうすればよいかわかりません.十分な詳細があることを願っています.上記の質問。

編集

以下は、トランザクションリストの作成方法です

ObservableCollection<Transaction> _localTransactionData = new ObservableCollection<Transaction>();


        public TransactionsViewModel(User passedThroughUser)
        {
            _user = passedThroughUser;
            _listOfTransactions = _user.Transactions;

            foreach (var item in _listOfTransactions)
            {
                LocalTransactionsList tran = new LocalTransactionsList();
                tran.Ammount = item.Ammount.ToString(); ;
                tran.Direction = item.Direction;
                _localTransactionData.Add(tran);
            }
        }
4

2 に答える 2

4

あなたの問題はここにあります:

public Transaction
{
    public string Ammount;
    public string Direction;
}

次のようにする必要があります。

public Transaction
{
    public string Ammount {get;set;}
    public string Direction {get;set;}
}

バインディング プロパティには、setter と getter が必要です。

于 2013-09-27T11:31:44.360 に答える
2

Transaction クラスをこれに変更することで、目的の動作を得ることができます...

public class Transaction : INotifyPropertyChanged
{
    private string _amount;
    public string Amount
    {
        [DebuggerStepThrough]
        get { return _amount; }
        [DebuggerStepThrough]
        set
        {
            if (value != _amount)
            {
                _amount = value;
                OnPropertyChanged("Amount");
            }
        }
    }
    private string _direction;
    public string Direction
    {
        [DebuggerStepThrough]
        get { return _direction; }
        [DebuggerStepThrough]
        set
        {
            if (value != _direction)
            {
                _direction = value;
                OnPropertyChanged("Direction");
            }
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string name)
    {
        var handler = System.Threading.Interlocked.CompareExchange(ref PropertyChanged, null, null);
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
}

これにより、WPF バインド エンジンがプロパティにアクセスして正しくバインドできるようになります。

INPC の詳細はこちらhttp://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

于 2013-09-27T11:35:44.613 に答える