这就是问题:我对一个对象绑定DataGrid
。我使用1个元素初始化此对象,但DataGrid
有2行。但是当我看着我的物体时,他只包含一排。这意味着有一行没有连接到我的对象,但它出现在我的DataGrid
上。
上下文是:用户可以在名为Criteria
的组合框中选择项目,并将其保存在集合UserCriteria
中。他可以通过单击按钮添加行。 UserCriteria
包含行的索引,因此他可以删除任何条件。但这个"奇怪的行"没有索引,所以如果删除这一行,程序就会崩溃。
我选择不使用添加按钮等显示代码...因为它不是问题的一部分,我确定。
我认为将此视图Search
与我的MainView
相关联时出现问题。我使用MVVMLight Toolkit,但我不确定如何连接它们。
我的SearchView(只是构造函数):
public SearchView()
{
DataContext = SearchViewModel;
InitializeComponent();
}
我的SearchViewModel:
public static ObservableCollection<UserCriterion> UserCriteria
{
get { return _UserCriteria; }
set { _UserCriteria = value; }
}
// CONSTRUCTOR
public SearchViewModel()
{
// This is a list of Criteria
Criteria = Criterion.GetCriteriaUsuable();
// In this function, I add one row to my Collection
UserCriteria = InitUserCriterionRow();
// To create the DataContext
SearchView.SearchViewModel = this;
}
我的SearchView XAML:
<Grid>
<DataGrid Name="CriteriaDataGrid" ItemsSource="{Binding UserCriteria, Mode=TwoWay}" AutoGenerateColumns="False">
<DataGrid.Columns>
<!--COMBOBOX FOR ATTRIBUTES-->
<DataGridTemplateColumn Header="Criteria" Width="250" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Width="235" SelectedItem="{Binding Path=DataContext.SearchViewModel.LastSelectedCriterion, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Mode=TwoWay}"
ItemsSource="{Binding Path=DataContext.SearchViewModel.Criteria, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Mode=TwoWay}"
IsEditable="True" DisplayMemberPath="Fullname"
HorizontalAlignment="Left">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
我的MainViewModel(在MainView中使用SearchView):
private ViewModelBase searchViewModel;
public ViewModelBase SearchViewModel
{
get { return searchViewModel; }
set
{
searchViewModel = value;
RaisePropertyChanged("SearchViewModel");
}
}
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel(IDataService dataService)
{
_dataService = dataService;
_dataService.GetData(
(item, error) =>
{
if (error != null)
{
// Report error here
return;
}
WelcomeTitle = item.Title;
});
SearchViewModel = SimpleIoc.Default.GetInstance<SearchViewModel>();
}
如果有人已经有这个问题,那么帮助我会很高兴!
度过愉快的一天
答案 0 :(得分:2)
您需要设置CanUserAddRows="false"
以及DataGrid的定义。这将帮助您防止在网格底部生成额外的行。网格定义如下:
<DataGrid Name="CriteriaDataGrid"
ItemsSource="{Binding UserCriteria, Mode=TwoWay}"
AutoGenerateColumns="False"
CanUserAddRows="false"> // You need to add this line