2010-07-09 7 views
0

Я использую listview для отображения данных, таких как матрица данных (столбцы и строки). Моя проблема: мои элементы напечатаны: MatrixCellVM. Я попробовал все, что нашел в сети, чтобы применить DataTemplate к этим элементам, но ничего не получилось.DataTemplate в listview

Вот последний метод я использую больше

foreach (var col in dataMatrix.Columns) 
{ 
    //create the data template 
    DataTemplate cellLayout = new DataTemplate(); 
    cellLayout.DataType = typeof(MatrixCellVM); 

    //set up the stack panel 
    FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(Grid)); 
    spFactory.Name = "myComboFactory"; 

    //set up value textblock 
    FrameworkElementFactory cellValue = new FrameworkElementFactory(typeof(TextBlock)); 
    cellValue.SetBinding(TextBlock.TextProperty, new Binding("Value")); 
    cellValue.SetValue(TextBlock.ToolTipProperty, "Value"); 
    spFactory.AppendChild(cellValue); 

    //set the visual tree of the data template 
    cellLayout.VisualTree = spFactory; 

    gridView.Columns.Add(new GridViewColumn{ 
     Header = col.Name, 
     DisplayMemberBinding = new Binding(string.Format("[{0}]", count)), 
     CellTemplate = cellLayout 
    }); 
    count++; 
} 

Одна вещь, когда я переопределить ToString() в MatrixCellVM, отображается значение (но с этой техникой добавить контекстное меню или давать какие-либо цвет к моему значению).

+0

Я удалил свой тег из названия вопроса - тег вы добавили достаточно :-) Добро пожаловать в StackOverflow! –

+0

Что вы думаете? –

+0

Класс MatrixCellVM имеет свойство Value. Я просто хочу отобразить его в текстовом блоке. Как я могу это сделать? – Toast

ответ

0

Я решил проблему, но имею другую.

Так что я сделал довольно просто. DisplayMemberBinding и CellTemplate не могут быть объединены.

Так что я удалил весь код C#, создав таблицу данных.

Единственное, что остается:

gridView.Columns.Add(
       new GridViewColumn 
        { 
         Header = col.Name, 
         CellTemplate = (DataTemplate)listView.Resources["MatrixCellVMTemplate"] 
        }); 

Таким образом, я добавил в моем XAML коде определения DataTemplate.

Моя новая проблема в том, что мои строки являются массивами MatrixCellVM (так как это матрица, у меня нет свойств, и я не знаю заранее, сколько столбцов у меня будет).

Это была точка DisplayMemberBinding = new Binding (string.Format ("[{0}], count)) в моем верхнем сообщении.

Как я могу воспроизвести это поведение в моем datatemplate (что является обязательным в моем текстовом блоке).

Если что-то неясно, дайте мне знать.

Благодаря

Смежные вопросы