2012-07-05 6 views
1

나는 레스토랑/상점에서 특정 시간 사이에 판매를 표시하는 창을 가지고 있습니다. 사용자가 쿼리 할 기간을 선택하면 해당 시간 사이의 판매 데이터가 표시됩니다. 나는 또한 쿼리를 필터링하도록 선택할 수있는 사용자 목록을 체계적으로 생성하고 있습니다. 예를 들어 나는 (이전에 선택한 시간대에서) 그에게 귀속 된 모든 판매를 표시하는 데 사용되는 '마이클'사용자를 선택합니다.ListView에 '모든 항목'항목을 포함하려면 어떻게해야합니까?

사용자를 ListView으로 만드는 것은 매우 쉽지만이 목록에 '모든 사용자'라는 항목을 추가하려고합니다. 그런 다음이 쿼리는 다시 쿼리로 전달되어 일부 사용자 (UserId = 999 또는 그 밖의 중요하지 않음)가이 사용자를 인식하여 모든 사용자의 데이터로 페이지를 다시 채 웁니다.

지금 당장 페이지를 종료하고 다시 로그인해야합니다. 매우 우아하지 않습니다!

그래서 그것의 실제 예 (어쩌면 내가 믿을 수 없을만큼 바보 오전을 인스턴스화 할 수 없습니다 내가 데이터베이스 EF에서 생성 된 목록에 ViewModelUser 개체를 추가하려고했지만이 IUsers의 목록을 만듭니다 여기에 근본적인 것이 빠져 있니?).

이 목표를 달성하는 데 도움이 될 것입니다.

+1

코드가 너무 필요합니다. 텍스트가 너무 많습니다. – MBen

+0

부끄러워하지 마. 무슨 짓을 한거야? – akhil

답변

0

사용자 인터페이스는 일반적으로 기본 사용자 정보를 래핑하는보기 모델을 만듭니다. 그런 다음보기가 바인드되는 이러한보기 모델의 콜렉션을 갖게됩니다. 그렇게했다고 가정하면이 컬렉션에 센티널 인스턴스를 추가하는 것이 간단합니다. 그것은이 같은 보일 수 있습니다 : 쿼리를 구성하는 코드에서

// 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 
    { 
     ... 
    } 
} 

을, 당신이해야 할 모든 사용자보기 모델의 사용자가 존재하는지 여부를 확인합니다. 그렇지 않은 경우 사용자 선택을 쿼리에 추가 할 필요가 없습니다.

0

당신은 당신의 ListBoxItemSource 설정 CompositeCollection를 사용하려고 할 수 있습니다 - 참조

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

을하지만 CollectionContainer이 바인딩을 지원하지 않는 Binding 작동하도록 (BindingProxy를 사용하여 같은) 몇 가지 해결 방법을 적용해야합니다 이러한 링크 -

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

How do you bind a CollectionContainer to a collection in a view model?

관련 문제