[英]WPF Datagrid with cell Material Design PackIcon
我正在嘗試使用在 c# 中生成的幾列填充數據網格。 其中一列是 PackIcon 或 PackIconMaterial,另一列是帶有多個文本列的復選框。 圖像將根據數據集合中的 int 值而變化。
<DataGrid Name="DataGrid1"/>
</DataGrid>
Code to populate the grid:
ObservableCollection<DemoModel> models = new ObservableCollection<DemoModel>();
models.Add(new DemoModel() { Text = "Some Text #1.", DynamicImg = PackIconKind.Bell });
models.Add(new DemoModel() { Text = "Some Text #2." });
models.Add(new DemoModel() { Text = "Some Text #3." });
models.Add(new DemoModel() { Text = "Some Text #4.", DynamicImg = PackIconKind.BellOutline});
models.Add(new DemoModel() { Text = "Some Text #5." });
DataGrid1.ItemsSource = models;
The model:
class DemoModel : INotifyPropertyChanged
{
protected String _text;
public String Text
{
get { return _text; }
set { _text = value; RaisePropertyChanged("Text"); }
}
protected String _dynamicText;
public String DynamicText
{
get { return _dynamicText; }
set { _dynamicText = value; RaisePropertyChanged("DynamicText"); }
}
internal bool MyIsReadOnly = true;
protected PackIconKind _DynamicImg;
public PackIconKind DynamicImg
{
get { return _DynamicImg; }
set {
_DynamicImg = value;
RaisePropertyChanged("DynamicImg");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(String propertyName)
{
PropertyChangedEventHandler temp = PropertyChanged;
if (temp != null)
{
temp(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我用這個代碼得到的只是文本“Bell”或“BellOutline”。 我也嘗試過“public PackIcon DynamicImg”,但這似乎只是在單元格中顯示類名而不是圖像。
有人有完整的例子嗎? 我看過一些例子,但沒有一個真正完整地使用 mahapps 圖標。
使用 .Net 4.6 和 Material Design 主題 2.3.1.953。
提前致謝,史蒂夫
我認為可行的是將 DataGrid 的 AutoGenereateColumnts 屬性設置為 false 並在 XAML 中定義它們。 如果您將一列的模板定義為 PackIcon,則可以將 PackIcon 類型綁定到它。
這是和示例:
XAML 中的 DataGrid
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Items}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTemplateColumn Header="Icon">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<materialDesign:PackIcon Kind="{Binding IconKind}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
背后的 MainWindow 代碼
public partial class MainWindow : Window
{
public ObservableCollection<Item> Items { get; set; } = new ObservableCollection<Item>();
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
Items.Add(new Item
{
Name = "Printer",
IconKind = PackIconKind.Printer
});
Items.Add(new Item
{
Name = "AbTesting",
IconKind = PackIconKind.AbTesting
});
Items.Add(new Item
{
Name = "GoogleHome",
IconKind = PackIconKind.GoogleHome
});
}
}
public class Item
{
public string Name { get; set; }
public PackIconKind IconKind { get; set; }
}
干杯,邁克爾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.