【发布时间】:2014-06-11 11:53:01
【问题描述】:
嗯,我不知道还能做什么。我检查了代码,一切正常。
所以我的问题是组合框没有填充任何数据,我检查了 ObservableCollection 集并且它有数据但它没有任何填充
我使用了 MVVM 模式,一切顺利,但没有调用 GET
我可以得到一些提示可能是什么原因,因为我没有想法
StudentDetailView.xaml
<Grid x:Name="LayoutRoot" Background="White">
<Grid DataContext="{Binding}" HorizontalAlignment="Left" Margin="12,12,0,0" Name="grid1" VerticalAlignment="Top" Height="176" Width="376">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="31*" />
</Grid.RowDefinitions>
<sdk:Label Content="Clasa ID:" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
<ComboBox Grid.Column="1" Grid.Row="0" Height="23" HorizontalAlignment="Left" Margin="3"
Name="clasaIDComboBox" VerticalAlignment="Center" Width="120"
DisplayMemberPath="Nume"
SelectedValuePath="ID" />
<sdk:Label Content="Data Nasterii:" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
<sdk:DatePicker Grid.Column="1" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="3" Name="data_NasteriiDatePicker" VerticalAlignment="Center" Width="120" />
<sdk:Label Content="ID:" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
<TextBox Grid.Column="1" Grid.Row="2" Height="23" HorizontalAlignment="Left" Margin="3" Name="iDTextBox" VerticalAlignment="Center" Width="120" />
<sdk:Label Content="Liceu ID:" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
<TextBox Grid.Column="1" Grid.Row="3" Height="23" HorizontalAlignment="Left" Margin="3" Name="liceuIDTextBox" VerticalAlignment="Center" Width="120" />
<sdk:Label Content="Nume:" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
<TextBox Grid.Column="1" Grid.Row="4" Height="23" HorizontalAlignment="Left" Margin="3" Name="numeTextBox" VerticalAlignment="Center" Width="120" />
</Grid>
<Button Content="Save Student" Height="23" HorizontalAlignment="Left" Margin="194,232,0,0" Name="btnSaveStudent" VerticalAlignment="Top" Width="95" Click="btnSaveStudent_Click" />
<Button Content="Cancel" Height="23" HorizontalAlignment="Left" Margin="295,232,0,0" Name="btnCancelStudent" VerticalAlignment="Top" Width="75" Click="btnCancelStudent_Click" />
<ct:ValidationSummary Width="300" Margin="12,194,70,23" />
</Grid>
StudentDetailView.xaml.cs
public StudentDetailView()
{
InitializeComponent();
clasaIDComboBox.SetBinding(ComboBox.ItemsSourceProperty, new Binding() { Path = new PropertyPath("LstHighSchool"), Mode = BindingMode.TwoWay });
clasaIDComboBox.SetBinding(ComboBox.SelectedValueProperty, new Binding() { Path = new PropertyPath("SelectedHighSchool"), Mode = BindingMode.TwoWay, NotifyOnValidationError = true, ValidatesOnExceptions = true });
}
以及来自 StudentViewModel.cs 的部分代码
private void AddNewStudentView(object param)
{
StudentDetailView addNewStudentView = new StudentDetailView();
addNewStudentView.DataContext = new Student();
var sdfsdfj = new StudentViewModel();
LoadOperation<Liceu> li = DomainContext.Load(DomainContext.GetLiceusQuery());
li.Completed += (s, e) =>
{
LstHighSchool = (s as LoadOperation<Liceu>).Entities.ToObservableCollection();
};
addNewStudentView.Closed += delegate
{
if (addNewStudentView.DialogResult == true)
{
Student newStudent = addNewStudentView.DataContext as Student;
if (string.IsNullOrEmpty(newStudent.Nume))
{
newStudent.ValidationErrors.Add(new ValidationResult("Numele nu poate sa fie invalid",new string[]{"Nume"}));
}
if (!newStudent.LiceuID.HasValue)
{
newStudent.ValidationErrors.Add(new ValidationResult("Liceu ID este gol", new string[] { "LiceuID" }));
}
if (!newStudent.HasValidationErrors)
{
if (newStudent != null)
{
DomainContext.Students.Add(newStudent);
LstStudents.Add(newStudent);
}
}
else
{
addNewStudentView.Show();
}
}
};
addNewStudentView.Show();
OnPropertyChanged("LstHighSchool");
}
private bool CanWork(object param)
{
return true; //for the moment this remains true, cause you can add all the time a new student, but this can be changed if there must be some conditions
}
private ObservableCollection<Liceu> _lstHighSchool;
public ObservableCollection<Liceu> LstHighSchool
{
get
{
return _lstHighSchool;
}
set
{
_lstHighSchool = value;
OnPropertyChanged("LstHighSchool");
}
}
private int _selectedHighSchool;
public int SelectedHighSchool
{
get
{
return _selectedHighSchool;
}
set
{
_selectedHighSchool = value;
OnPropertyChanged("SelectedHighSchool");
}
}
#endregion
【问题讨论】:
-
您只能发布有问题的代码!
-
为什么要从 C# 代码而不是 XAML 定义绑定?此外,您的 MVVM 做事方式看起来真的很糟糕,因为您当前正在从您所谓的 ViewModel 实例化和操作视图。
-
@Sajeetharan 我认为问题出在 ViewModel 因为 Get 没有被调用
-
@ken2k 我还是 MVVM 的新手,我在 C# 代码中定义绑定,以便在发生更改时将设计与代码绑定分开。
-
Grid DataContext="{Binding}"此时有什么上下文?检查您的输出窗口以获取有关绑定的消息 - 如果存在绑定问题,它会在那里显示。
标签: c# silverlight xaml mvvm