質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

2424閲覧

WPF ListView でデータで背景色をセットしたい

byori

総合スコア71

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2022/02/24 02:23

表題通りです。下記の様に行いましたがデータをセットしても変わりません。
背景色を行単位で変更(背景色)したい

おかしな点をご指摘ください。
よろしくお願いいたします。
Windows11 / 10 VS2019 C# WPF

xaml

1 <ListView Margin = "8,0" x:Name="lvDatas" BorderThickness="1" ScrollViewer.VerticalScrollBarVisibility="Auto" FontSize="14" 2 GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" MouseDoubleClick="lvDatas_MouseDoubleClick" PreviewMouseDown="lvDatas_PreviewMouseDown"> 3 <ListView.Resources> 4 <Style TargetType="{x:Type ListViewItem}"> 5 <Setter Property="Template"> 6 <Setter.Value> 7 <ControlTemplate TargetType="{x:Type ListViewItem}"> 8 <GridViewRowPresenter /> 9 </ControlTemplate> 10 </Setter.Value> 11 </Setter> 12 </Style> 13 </ListView.Resources> 14 <ListView.ItemContainerStyle> 15 <Style TargetType="{x:Type ListViewItem}"> 16 <Setter Property="Background" Value="Pink" /> 17 <Style.Triggers> 18 <DataTrigger Binding="{Binding judge}" Value="yes"> 19 <Setter Property="BorderBrush" Value="Blue"/> 20 <Setter Property="Background" Value="Red"/> 21 </DataTrigger> 22 </Style.Triggers> 23 24 </Style> 25 </ListView.ItemContainerStyle> 26 <ListView.View> 27 <GridView> 28 <GridViewColumn Header="No" DisplayMemberBinding="{Binding No}" Width="20"/> 29 <GridViewColumn Header="委託元" DisplayMemberBinding="{Binding Entruster}" Width="68"/> 30 <GridViewColumn Header="営業コード" DisplayMemberBinding="{Binding EntrusterNo}" Width="80"/> 31 : 32 : 33 </GridView> 34 </ListView.View> 35 </ListView>

ビハインドコード

xaml.cs

1 // 処理済みに背景色セットの準備 2 Model.judge = "no"; 3 4 5 : 何らかの処理 6 : 7 8 // 処理済みに背景色セット 9 Model.judge = "yes"; <- ここで背景色の変更をセットしているつもりです。 10 実際には変わらない

ViewModel.cs

1class ViewModel : INotifyPropertyChanged 2{ 3 public event PropertyChangedEventHandler PropertyChanged; 4 : 5 6 // 修正済みデータに背景色をセットする 7 public string _judge; 8 public string judge 9 { 10 get { return this._judge; } 11 set 12 { 13 if (this._judge != value) 14 { 15 this._judge = value; 16 this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(judge))); // <- これがないと変更の有無が xaml 側に知らされない 17 } 18 } 19 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

CommunityToolkitのテストがてらってだけなので、INotifyPropertyChangedICommand実装については何でもいいです。
NuGet Gallery | CommunityToolkit.Mvvm 8.0.0-preview1

[Feature] MVVM Toolkit vNext: source generators! 🚀 · Issue #8 · CommunityToolkit/dotnet

xml

1<Window 2 x:Class="Q25h9y4015oa2bx.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Width="800" 6 Height="450"> 7 <Grid> 8 <ListView ItemsSource="{Binding Items}"> 9 <ListView.ItemContainerStyle> 10 <Style TargetType="{x:Type ListViewItem}"> 11 <EventSetter Event="MouseDoubleClick" Handler="ListViewItem_MouseDoubleClick" /> 12 <Setter Property="Background" Value="Pink" /> 13 <Style.Triggers> 14 <DataTrigger Binding="{Binding Judge}" Value="yes"> 15 <Setter Property="BorderBrush" Value="Blue" /> 16 <Setter Property="Background" Value="Red" /> 17 </DataTrigger> 18 </Style.Triggers> 19 </Style> 20 </ListView.ItemContainerStyle> 21 <ListView.View> 22 <GridView> 23 <GridViewColumn DisplayMemberBinding="{Binding No}" Header="No" /> 24 <GridViewColumn DisplayMemberBinding="{Binding Entruster}" Header="委託元" /> 25 <GridViewColumn DisplayMemberBinding="{Binding EntrusterNo}" Header="営業コード" /> 26 <GridViewColumn DisplayMemberBinding="{Binding Judge}" Header="Judge" /> 27 <GridViewColumn> 28 <GridViewColumn.CellTemplate> 29 <DataTemplate> 30 <Button Command="{Binding JudgeCommand}" Content="Judge" /> 31 </DataTemplate> 32 </GridViewColumn.CellTemplate> 33 </GridViewColumn> 34 </GridView> 35 </ListView.View> 36 </ListView> 37 </Grid> 38</Window>

cs

1using System.Collections.ObjectModel; 2using System.Windows; 3using System.Windows.Controls; 4using System.Windows.Input; 5 6namespace Q25h9y4015oa2bx 7{ 8 public partial class MainWindow : Window 9 { 10 public ObservableCollection<ItemViewModel> Items { get; } 11 12 public MainWindow() 13 { 14 InitializeComponent(); 15 16 Items = new() 17 { 18 new() { No = "No.1", Entruster = "委託元1", EntrusterNo = "営業コード1", Judge = "no", }, 19 new() { No = "No.2", Entruster = "委託元2", EntrusterNo = "営業コード2", Judge = "no", }, 20 new() { No = "No.3", Entruster = "委託元3", EntrusterNo = "営業コード3", Judge = "no", }, 21 }; 22 23 DataContext = this; 24 } 25 26 private void ListViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e) 27 { 28 if (sender is ListViewItem { DataContext: ItemViewModel vm }) 29 { 30 vm.JudgeCommand.ExecuteAsync(null); 31 } 32 } 33 } 34}

cs

1using System; 2using System.Threading.Tasks; 3using CommunityToolkit.Mvvm.ComponentModel; 4using CommunityToolkit.Mvvm.Input; 5 6namespace Q25h9y4015oa2bx 7{ 8 public partial class ItemViewModel : ObservableObject 9 { 10 public string? No { get; set; } 11 public string? Entruster { get; set; } 12 public string? EntrusterNo { get; set; } 13 14 // public string? Judge { get; set; } がソースジェネレーターで生成されています 15 [ObservableProperty] private string? judge; 16 17 // public IAsyncRelayCommand JudgeCommand { get; } がソースジェネレーターで生成されています 18 [ICommand(AllowConcurrentExecutions = false)] 19 private async Task JudgeAsync() 20 { 21 await Task.Delay(TimeSpan.FromSeconds(3)); // なんかやってるとして 22 23 Judge = "yes"; 24 } 25 } 26}

アプリ画像

投稿2022/02/24 09:55

編集2023/07/30 04:46
TN8001

総合スコア9326

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

自己レスです。

ListView のデータなのに

this._judge = value;

としているのが問題のようですね。

ListView の ItemsSource に下記のようにセットしているのでそのメンバーとして _judge を追加しました。

lvDatas.ItemsSource = Model._iraisho;

投稿2022/02/24 07:12

byori

総合スコア71

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2022/02/24 09:54

省略が多すぎてまったくナレッジになっていないと思います。 もちろんコードをそのまま出すわけにはいかないでしょうが、論点を整理して閲覧者にも意味が分かる(役に立つ)ようにしていただきたいです。
byori

2022/02/25 04:46

> 省略が多すぎて・・・論点を整理して閲覧者にも意味が分かる(役に立つ)ようにしていただきたいです。 大変失礼いたしました。 そして、いつもお世話になっております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問