低于我的观点
1-ConnectionViewModel类的用途是什么,它只是扭曲DataConnectionViewModel,所以我建议您可以去掉ConnectionViewModel()并使用DataConnectionViewModel。
2-我认为您可以去掉EmployeesGrid类,因为您只需要一个雇员集合,所以不要使用单独的集合类,而是在DataConnectionViewModel()类中进行ObservrableCollection。
3-使用wpf-model-view view model模板,这样可以提供更好的想法
4-我刚刚重新编译了您的代码,创建了一个类似的应用程序,它使用MVVM和ObservableCollection,而且使用起来更简单。
我的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
创建继承ViewModelBase类的DataConnectionViewModel。
使用系统;
使用system.collections.generic;
使用system.linq;
使用system.text;
使用employee.models;
使用system.collections.objectmodel;
命名空间Employee.ViewModels
{
公共类日期连接模块:ViewModelBase
{
#区域“实例变量”
public static string[]datessstring=“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类
使用系统;
使用system.collections.generic;
使用system.componentmodel;
使用system.linq;
使用system.text;
使用system.windows;
使用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中设置数据上下文
公共分部类主视图:窗口
{
公共主视图()
{
初始化组件();
this.DataContext = new DateConectionModule();
}
}
还有很多其他的事情,比如依赖注入等。但是对于您的情况,您可以编写一个控制器,它调用您的DataService来给您提供就业列表,而不是将列表分配给ObservableCollection。
4-我可以建议您阅读Abot Prism框架,它在应用程序管理和TDD中提供了很大的灵活性。