2010-01-26 45 views
1

我想將列添加到Silverlight DataGrid,但有問題。在我看來(我使用棱鏡),我可以在構造函數中添加列沒有問題,這工作正常 -使用Silverlight DataGrid的動態列

public MyView() 
{ 
    InitializeComponent(); 
    myDatagrid.Columns.Add(new DataGridCheckBoxColumn() { Header = "HELLO!" }); 
} 

但是,如果我嘗試添加一列時,DataContext設置添加列(調試時可以看到Columns.Count增加),但是新列未呈現。

public IMyViewModel ViewModel 
{ 
    get { return DataContext as IMyViewModel ; } 
    set 
    { 
     DataContext = value; 
     myDatagrid.Columns.Add(new DataGridCheckBoxColumn() { Header = "HELLO!" }); 
    } 
} 

現在,我知道這不尊重MVVM範例。這不是我打算編寫代碼的方式,但是我需要在視圖中使用類似這樣的糟糕代碼來設置綁定到DataGrid的ItemSource更改時的列。你會發現列會根據用戶的輸入而增長和縮小,我需要添加/刪除列並相應地設置綁定。

我也曾嘗試以下以爲這是因爲它沒有在UI線程上執行 -

myDatagrid.Dispatcher.BeginInvoke(() => 
{ 
    myDatagrid.Columns.Add(new DataGridCheckBoxColumn() { Header = "HELLO!" }); 
}); 

回答

0

我認爲它可能有點過分的要求的DataGrid時,其已經動態地創建新的細胞顯示數據。在DataGrid上增加新列可能是值得UpdateLayout,以確定是否說服它重新佈局單元格。

+0

恐怕沒有奏效。 我試着用一個單擊事件處理程序向用戶控件添加一個按鈕,該處理程序執行相同的代碼行,並且添加了不麻煩的列。 – jameskind 2010-01-27 20:07:44