2014-12-09 9 views
1

MVVM 모델을 사용하는 C# WPF 응용 프로그램에서 작업하고 있습니다. 여러 값을 추가하는 DataGrid가 있고 그리드에있는 항목의 수를 계산하고 그 값을 다른 페이지에 표시하려고합니다. 문제는 데이터 그리드가있는 동일한 페이지에 카운트가 표시되지만 다른 페이지에는 카운트가 표시되지 않는다는 것입니다.WPF DataGrid에있는 항목을 계산하고 다른 페이지에 표시하는 방법은 무엇입니까?

public ObservableCollection<VLANSPropertyClass> vlan { get; set; } 

<TextBlock Margin="3,0" 
      Style="{StaticResource SummaryValues}" 
      Text="{Binding vlan.Count}" 
      /> 

가 어떻게이 데이터 그리드의 항목을 다른 페이지에 의지 표시 할 수 있습니다 다음과 같이

내 코드는?

+0

이 두 페이지에 동일한 DataContext가 있습니까? –

+0

두 페이지 모두에 대해 동일한 ViewModel을 사용하면 안됩니다! – Usama

+0

이 표현식을 두 페이지에서 사용하려면 두 페이지가 동일한 DataContext를 참조해야합니다. –

답변

0

ViewModel을 단일 인스턴스로 만듭니다. 즉.

public class ViewModel 
{ 
    private static ViewModel instance = new ViewModel(); 

    private ViewModel() 
    { 

    } 

    public static ViewModel Instance 
    { 
     get 
     { 
      if (instance == null) 
       instance = new ViewModel(); 
      return instance; 
     } 
    } 

    public ObservableCollection<string> vlan { get; set; } 
} 

첫 번째 창에서 DataContext를 ViewModel.Instance로 설정할 수 있습니다. 즉, , 이것은 당신이 뷰 모델의 동일한 인스턴스로 설정 두 창을 할 수

public Window1() 
    { 
     InitializeComponent(); 
     this.DataContext = ViewModel.Instance; 
    } 

:

public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = ViewModel.Instance; 
     ViewModel.Instance.vlan=new ObservableCollection<string> { "Fred", "Theo", "Lil Kitty" }; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     ViewModel.Instance.vlan.Add(String.Format("String {0}", ViewModel.Instance.vlan.Count + 1)); 

     Window1 win = new Window1(); 
     win.Show(); 
    } 

그런 다음 당신은 또한 ViewModel.Instance에의 DataContext를 설정 다른 창, 예를 가질 수 그리고 당신은 여전히 ​​각 윈도우에서 이와 같이 바인딩 할 수 있습니다. (내 예제는 매번 새로운 윈도우를 생성하고 모든 윈도우에서 카운트를 업데이트합니다) :

<TextBlock Text="{Binding vlan.Count}" /> 
+0

@ CodeTheft 작동 시키셨습니까? –

+0

@CodeTheft에 질문에 대한 답변이 있습니까? 그것이있는 경우 표시하십시오 ... –

관련 문제