이것은 문제입니다. 개체에 DataGrid
바인딩이 있습니다. 이 개체를 1 요소로 초기화하지만 DataGrid
에는 2 개의 행이 있습니다. 그러나 내 물건을 볼 때, 그는 단지 하나의 줄만 가지고 있습니다. 즉, 내 객체에 연결되지 않은 행이 하나 있는데 그 행이 내 DataGrid
에 표시됩니다.DataGrid : 아무 이유없이 한 행이 표시됩니다.
컨텍스트는 다음과 같습니다. 사용자는 Combobox에서 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>();
}
누군가 이미이 문제가 발생하면 도움이 될 것입니다.
은 좋은 하루 당신은 데이터 그리드의 정의와 함께CanUserAddRows="false"
을 설정해야
이것은 완벽합니다! 젠장, 정말 고마워! 나는이 주장이'Mode = TwoWay'를 할 수 있다고 생각했다. 이 추가 행이 생성 된 이유를 알고 있습니까? – Destunk
행복하게 기뻐하십시오 –
사용자가 새 행을 추가 할 수 있도록 추가 행이 추가되었습니다. 첫 번째 행에서 타이핑을 시작할 때 알아 차리면 다른 행이 추가됩니다. CanUserAddRows = "true"가 설정된 경우 데이터 그리드가 작동하는 기본 방법입니다. 이 플래그는 기본적으로 true이므로이 동작을 방지하려면이 플래그를 false로 설정해야합니다. –