既然你不能很容易地綁定一個電網的行/列的定義,我建議你建立一個簡單的自定義控制,直接從電網繼承。
這裏是我的方法有3個額外的依賴屬性:
- INT MyColumnCount
- INT MyRowCount
- 的ObservableCollection MyChilds
的MyColumnCount/MyRowCount將被綁定到視圖模型屬性,當你從數據庫中得到新的值時,你更新它。此外,ViewModel將提供一個FrameworkElements的集合,它將成爲Grid中的項目並綁定到MyChilds。
您可以在ViewModel中創建新控件並使用網格的附加屬性來設置位置。例如:
TextBlock b = new TextBlock() { Text = "Hello World!" };
Grid.SetRow(b, <your position>);
Grid.SetColumn(b, <your position>);
Grid.SetColumnSpan(b, <your column span>);
MyChilds.Add(b);
在PropertyChangedCallbacks新INT屬性,將修改行/列的定義,根據該新的值。 collection屬性的回調會在新的ObservableCollection上註冊一個集合已更改的事件,並在更改事件時將新項添加到Grid的子項。
這就是動態網格更改所需的全部內容。
回答第二個問題: 這很簡單。如果你發現你會得到網格中點擊項目的發件人。發件人大多是直接點擊的控件。您可以再次使用靜態網格功能,計算位置:
Grid.GetRow(item);
Grid.GetColumn(item);
Grid.GetColumnSpan(item);
隨着網格的行/列的總數(我...算),就可以計算出鄰居位置。
Jan
嗯聽起來很有趣我會試試你的方法。希望跳過創建一個自定義控件,但... – debe 2010-08-10 07:12:21
@debe它的工作與否? – Omarj 2013-11-01 22:28:24