這就是問題所在:我有一個DataGrid
綁定在一個對象上。我用1個元素初始化這個對象,但DataGrid
有2行。但是當我看着我的對象時,他只包含一行。這意味着有一行沒有連接到我的對象,但它出現在我的DataGrid
。DataGrid:一行無緣無故地出現
上下文是:用戶可以選擇名爲Criteria
的Combobox中的項目,它將被保存在Collection UserCriteria
中。他可以通過點擊按鈕添加行。 UserCriteria
包含該行的索引,因此他可以刪除任何標準。但這個「奇怪的行」沒有索引,所以如果他刪除了這一行,程序就會崩潰。
我選擇不顯示添加按鈕等代碼......因爲它不是問題的一部分,我敢肯定。
我認爲在將此視圖Search
連接到我的MainView
時出現問題。我正在使用MVVMLight Toolkit,但我不確定如何連接兩者。
我搜索查看(只是構造函數):
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;
}
我搜索查看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的搜索查看):
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>();
}
如果有人已經有這個問題,它將很高興幫助我!
有一個愉快的一天
這是完美的!該死,真的非常感謝你!我認爲這個參數可以用'Mode = TwoWay'。你知道爲什麼會有這一行的代? – Destunk
很高興看到你 –
額外的行被添加來幫助用戶添加新的行。如果你注意到當你開始在第一行輸入時,另一行將被添加。這是設置CanUserAddRows =「true」時數據網格的默認工作方式。這個標誌默認是true,所以如果你想避免這種行爲,你應該把這個標誌設置爲false。 –