當動態添加和刪除GridViewColumns時,WPF Listview有問題。 如果我從ListView中刪除一些列,然後添加刪除的列,添加的列是不可見的!WPF ListView動態添加列不可見
我正在刪除像這樣的列。
List<GridViewColumn> gvLists;
for (int i = 0; i < grdView.Columns.Count; i++)
{
// keeping the grdView cols in to a list for later adding back
gvLists.Add(grdView.Columns[i]);
}
// here removing the columns from ListView.GridView
foreach (GridViewColumn g in gvLists)
{
if (g.Header.ToString() != "ID")
{
grdView.Columns.Remove(g);
}
}
,並重新添加這些後來的cols這樣
foreach (GridViewColumn g in gvLists)
{
if(!grdView.Columns.Contains(g)) grdView.Columns.Add(g);
}
但這些添加的列不是在ListView可見。但是,如果調試並檢查列,所有添加的列都在那裏。爲什麼添加的列不可見?
當我添加這些列後,我嘗試調用InvalidateMeasure和Arrange。但沒用。
另外我注意到還有一件事是,ListView Loaded事件發射多次!
我將ListView與DataSet中的DataTable綁定在一起,而不是使用MVVM。
還有一件事是,我使用的所有列HeaderTemplates如下圖所示:
<GridViewColumn Width="50" Header="Name">
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<DockPanel>
<TextBlock Height="23" TextAlignment="Center" Text="Name" Width="80"/>
<Path Name="SortArrow" StrokeThickness="1" Fill="Gray" Data="M 5,5 L 10,10 L 15,5 L 5,5" Visibility="Collapsed"/>
</DockPanel>
</DataTemplate>
</GridViewColumn.HeaderTemplate>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Name.....}" Width="20" Height="15" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
的塔中取出,並重新添加由窗口複選框的校驗值觸發。如果選中該複選框,我將調用RemoveCols(),並在取消選中時調用AddCols()。
是要添加文本列的列? –
是的。每列都有一個頭文件模板和一個已定義的單元格模板。如果列的標題模板包含文本框,則其單元格模板具有文本框。如果列的標題模板包含組合框,則其單元格模板具有組合框。 – James
'我將ListView與DataSet中的DataTable綁定在一起,而不是使用MVVM。「 - 通過嘗試強制WPF轉換爲Winforms方法,您正在浪費時間。你會失敗。 WPF不支持winforms思路的開發人員。在2個獨立的UserControls中創建2個獨立的ListView,並在複選框被選中時使用ContentPresenter在它們之間切換。您並不需要將過程代碼中的列添加到ListView中。 –