1

レストラン/ショップで特定の時間の売上を表示するウィンドウがあります。ユーザーが照会する期間を選択すると、その期間の売上データが表示されます。また、クエリをフィルタリングするために選択できるユーザーのリストをプログラムで作成しています。たとえば、「Michael」というユーザーを選択すると、それを使用して、(前に選択した時間枠で) 彼に起因するすべての売上が表示されます。

ユーザーの作成ListViewはかなり簡単ですが、このリストに「すべてのユーザー」という項目を追加しようとしています。これはクエリに返され、プロパティ (UserId = 999 など。重要ではありません) によってこのユーザーが認識され、すべてのユーザーのデータがページに再度入力されます。

これを行うには、今すぐページを終了して戻る必要があります。あまりエレガントではありません!

データベースEFから生成されたリストにUserオブジェクトを追加しようとしましたが、リストが作成されるため、実際のインスタンスをインスタンス化できません(おそらく、私はここで信じられないほど愚かで、基本的な何かが欠けていますか? )。ViewModelIUsers

この目標を達成するための助けをいただければ幸いです。

4

2 に答える 2

0

通常、UI は、基になるユーザー情報をラップするビュー モデルを作成します。次に、ビューがバインドされるこれらのビュー モデルのコレクションを取得します。それがあれば、このコレクションに番兵インスタンスを追加するのは簡単なことです。次のようになります。

// this is your DAL class
public class User
{
}

// a view model to wrap the DAL class    
public class UserViewModel
{
    // a special instance of the view model to represent all users
    public static readonly UserViewModel AllUsers = new UserViewModel(null);
    private readonly User user;

    public UserViewModel(User user)
    {
        ...
    }

    // view binds to this to display user
    public string Name
    {
        get { return this.user == null ? "<<All>>" : this.user.Name; }
    }
}

public class MainViewModel()
{
    private readonly ICollection<UserViewModel> users;

    public MainViewModel()
    {
        this.users = ...;
        this.users.Add(UserViewModel.AllUsers);
    }

    public ICollection<UserViewModel> Users
    {
        ...
    }
}

クエリを作成するコードでは、ユーザー ビュー モデルにユーザーが存在するかどうかを確認するだけです。そうでない場合は、クエリにユーザー選択を追加する必要はありません。

于 2012-07-05T12:24:23.507 に答える
0

CompositeCollectionを使用して設定することができItemSourceますListBox-

<ListBox> 
    <ListBox.ItemsSource> 
        <CompositeCollection> 
            <CollectionContainer Collection="{Binding YourCollection}" /> 
            <ListBoxItem Foreground="Magenta">Select All</ListBoxItem> 
        </CompositeCollection> 
    </ListBox.ItemsSource> 
</ListBox> 

ただし、 CollectionContainer はバインディングをサポートしていないため、いくつかの回避策( BindingProxyを使用するなど)を適用する必要があります。これらのリンクを参照してください-Binding

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/637b563f-8f2f-4af3-a7aa-5d96b719d5fd/

CollectionContainer をビュー モデルのコレクションにバインドするにはどうすればよいですか?

于 2012-07-05T12:37:17.320 に答える