Под моими точками
1 - Какая польза от класса ConnectionViewModel, это просто деформация DataConnectionViewModel, поэтому я хотел бы предложить избавиться от ConnectionViewModel () и использовать DataConnectionViewModel.
2-Я думаю, что вы можете избавиться от класса employeeGrid, потому что все, что вам нужно для коллекции сотрудников, а не для использования отдельного класса коллекции, создайте наблюдаемую коллекцию в классе DataConnectionViewModel ().
3- Используйте Wpf-модель -Шаблон View-ViewModel, который дает вам лучшее представление
4 - я просто перекрасил ваш код и создал аналогичное приложение, которое использует MVVM и ObservableCollection и намного проще в использовании.
my xaml
<Window.Resources>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</Window.Resources>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="381*" />
<ColumnDefinition Width="20*" />
<ColumnDefinition Width="101*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="110*" />
<RowDefinition Height="201*" />
</Grid.RowDefinitions>
<StackPanel Margin="320,0,0,0" Grid.RowSpan="2">
<ListView ItemsSource="{Binding EmpList}">
<ListView.View>
<GridView>
<GridViewColumn Header="Employee ID" DisplayMemberBinding="{Binding Path=EmployeeID}"/>
<GridViewColumn Header="First Name" DisplayMemberBinding="{Binding Path=FirstName}"/>
<GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding Path=LastName}"/>
<GridViewColumn Header="start" DisplayMemberBinding="{Binding Path=startHR}"/>
<GridViewColumn Header="finish" DisplayMemberBinding="{Binding Path=finishHR}">
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</StackPanel>
<StackPanel Margin="2,0,0,137" Grid.RowSpan="2" Grid.ColumnSpan="2" Grid.Column="1">
<ListBox FontFamily="Guttman Yad-Brush" BorderBrush="AliceBlue" BorderThickness="5" ItemsSource="{Binding Path=dateItems}" DisplayMemberPath="Name" SelectedValuePath="Name" SelectedValue="{Binding Path=dateItem}" Width="233" Height="164" />
</StackPanel>
<!--<Button Click="Button_Click" Width="102" Height="34" Margin="0,98,-1,69" Grid.Row="1" Grid.Column="2" Content="בחר" FontFamily="Guttman Yad-Brush" Background="AliceBlue"></Button>-->
<TextBox Name="dateTextBox" Grid.Column="1" Margin="26,152,0,33" Grid.Row="1" FontFamily="Guttman Yad-Brush" Grid.ColumnSpan="2" />
<!--<Calendar SelectedDate="{Binding Path=SelectedDate}" Height="168" Name="calendar1" Width="182" SelectedDatesChanged="calendar1_SelectedDatesChanged" Margin="66,68,485,115" Grid.RowSpan="2" />-->
</Grid>
Мой код
1-
Создать DataConnectionViewModel, который наследует класс ViewModelBase.
using System;using System.Collections.Generic;использование System.Linq;используя System.Text;использование Employee.Models;using System.Collections.ObjectModel;
пространство имен Employee.ViewModels {открытый класс DateConectionModule: ViewModelBase {#region "Переменные экземпляра" открытая статическая строка [] dateString = {"01.01.2011", "02.01.2011",«03.01.2011», «04.01.2011», «05.01.2011»};#endregion "Переменные экземпляра"
#region " Constructor "
public DateConectionModule()
{
CreateEmployeeData();
}
#endregion " Constructor "
#region " Public Properties "
public ObservableCollection<EmployeeData> EmpList { get; set; }
#endregion " Public Properties "
#region " Helper Methods "
private void CreateEmployeeData()
{
EmpList = new ObservableCollection<EmployeeData>();
EmpList.Add
(
new EmployeeData() { EmployeeID="1", LastName="Gates", FirstName="Bill", finishHR="", startHR ="" }
);
}
#endregion " Helper Methods "
}
}
2 - ViewModelBAse Class
using System;using System.Collections.Generic;using System.ComponentModel;использование System.Linq;используя System.Text;используя System.Windows;using System.Windows.Input;
пространство имен Employee.ViewModels {/// /// Предоставляет общие функциональные возможности для классов ViewModel /// открытый абстрактный класс ViewModelBase: INotifyPropertyChanged {открытое событие PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
3- Установить контекст данных в MainWindow.Xaml.cs
открытый частичный класс MainView: Window {public MainView () {InitializeComponent ();
this.DataContext = new DateConectionModule();
}
}
Есть много других вещей, таких как Dependency Injection и т. Д., Но для вашего случая вы можете написать контроллер, который вызывает ваш dataservice, чтобы предоставить вам список занятости, а не присваивать список наблюдаемой коллекции.
4 - Я могу предложить инфраструктуру read abot Prism, которая дает вам большую гибкость при управлении приложениями, а также в TDD.