4月 22, 2025 C# WPF
### 先去 CODE

下面是 view model

```c#
// 定義一個 private log message 的 ovservable collection (如果用普通 list 的話, wpf 會唔識 reactive update 個 UI)
private ObservableCollection<LogMessage> _logMessages = new ObservableCollection<LogMessage>();

// 再定義一個 public 的 Log messages 用來呼叫 OnPropertyChanged() 通知 wpf update 返個 UI
public ObservableCollection<LogMessage> LogMessages {

	get => _logMessages;

	set {

		if (_logMessages != value) {

			_logMessages = value;

			OnPropertyChanged();
		}
	}
}

```
  
下面是 xaml

```xaml
<ListView ItemsSource="{Binding Path=LogMessages}"
          ScrollViewer.HorizontalScrollBarVisibility="Disabled"
          Grid.Row="1"
          Grid.Column="0">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Focusable"
                    Value="False" />
            <Setter Property="IsHitTestVisible"
                    Value="False" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid Margin="0,0,0,10">
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto" />
                    <RowDefinition Height="auto" />
                    <RowDefinition Height="auto" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Path=Title}"
                           Foreground="{Binding Path=Color}"
                           FontWeight="Bold"
                           TextWrapping="Wrap"
                           FontSize="14"
                           Grid.Row="0"
                           Grid.Column="0" />
                <TextBlock Text="{Binding Path=Message}"
                           Foreground="{Binding Path=Color}"
                           TextWrapping="Wrap"
                           Grid.Row="1"
                           Grid.Column="0" />
                <TextBlock Text="{Binding Path=LogAt}"
                           Foreground="#999999"
                           TextWrapping="Wrap"
                           Margin="0,5,0,0"
                           Grid.Row="2"
                           Grid.Column="0" />
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
```

這樣就可以輕鬆畫出 listview
  
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHDnqOrMsv-k7UQ1XwRdKniVsScEVFzEcHtZ2BRHYJPyrj1a8oU351yp3C8_4GGXs24J7Ac1WMnTeTGMkoo4-aMqzhfAO05fIKgEpup330JGQgffYNuW_GEPgjEbIhYOlnSxHLIp0mM6QBzc2BQCK2RnnGY9f62g4QdVDbA-LrqBtGMPeJhRs4KHETE5c/s1600/2025-04-22%2014.29.16.png)
過去文章
2025 (9)
4 (5)
3 (1)
2 (3)
2024 (25)
11 (3)
10 (3)
9 (1)
3 (18)
2022 (6)
10 (1)
6 (2)
5 (1)
3 (1)
1 (1)
2021 (21)
11 (7)
7 (1)
6 (2)
5 (2)
4 (6)
3 (2)
2 (1)
2020 (92)
12 (1)
11 (2)
10 (4)
9 (10)
8 (5)
7 (1)
6 (3)
5 (1)
4 (4)
3 (25)
2 (7)
1 (29)
2019 (57)
12 (25)
11 (7)
9 (25)