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}" />
이 두 페이지에 동일한 DataContext가 있습니까? –
두 페이지 모두에 대해 동일한 ViewModel을 사용하면 안됩니다! – Usama
이 표현식을 두 페이지에서 사용하려면 두 페이지가 동일한 DataContext를 참조해야합니다. –