Я работаю в приложении С# WPF с использованием модели MVVM. У меня есть DataGrid, в котором я добавляю несколько значений, и я хочу подсчитать количество элементов, присутствующих в сетке, и отобразить это значение на другой странице. Проблема в том, что счетчик отображается на той же странице, где у меня есть мой DataGrid, но он не отображает счет на другой странице.
Мой код выглядит следующим образом:
public ObservableCollection<VLANSPropertyClass> vlan { get; set; }
<TextBlock Margin="3,0"
Style="{StaticResource SummaryValues}"
Text="{Binding vlan.Count}"
/>
Как я могу отобразить количество элементов DataGrid на другой странице?
Сделайте свой 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 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();
}
Тогда у вас может быть другое окно, которое также устанавливает DataContext в ViewModel.Instance, то есть:
public Window1()
{
InitializeComponent();
this.DataContext = ViewModel.Instance;
}
Это позволит вам установить оба окна в SAME-экземпляр ViewModel, и вы все равно можете привязываться так же в каждом окне (мой пример каждый раз создает новое окно и обновляет счет во всех окнах и т.д.):
<TextBlock Text="{Binding vlan.Count}" />