Aller au contenu

Change
Bienvenue sur GeekZone
Inscrivez-vous sur GeekZone pour profiter des fonctions avancées du forum, proposer des news, participer aux conversations, ouvrir votre galerie, profiter de la messagerie interne et venir tester nos modérateurs avec du bon troll... Attention, ils ont la gâchette facile. C’est aussi pour ça que GeekZone est le meilleur site de passionnés depuis 2002 ! Si vous avez déjà un compte, connectez-vous - sinon, il est temps d'en créer un.

[WPF] databinding sur le datarowstate d'un datacontext

- - - - -

  • Veuillez vous connecter pour répondre
6 réponses à ce sujet

#1
ElRed

ElRed

    Senseï Geek

  • Membre
  • PipPipPipPipPip
  • 1307 messages
Bonjour,
je me remets sur wpf histoire de voir l'aspect accés aux donnees.

J'ai un datagrid basé sur le datacontext (le resultat de la méthode 'GetData' est un dataview).
Le but est de créer un indicateur en fonction de l'état du row (modifier la couleur par exemple)

J'ai essayé avec un style trigger sur le rowstate et le rowaction mais ca ne marche pas (rien ne se passe).

<Window x:Class="Step.MainWindow"
		xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
		xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
		xmlns:data="clr-namespace:System.Data;assembly=System.Data"
		xmlns:local="clr-namespace:Step"	  
		Title="Step Admin" Height="350" Width="525" Loaded="Window_Loaded" Name="res">
	<Window.Resources>
		<ObjectDataProvider x:Key="MyDataSource" MethodName="GetData" ObjectType="{x:Type local:MyDataProvider}"/>																								  
	</Window.Resources>  
	<Grid>			  
		<DataGrid AutoGenerateColumns="False" Name="dataGrid1"   ItemsSource="{Binding Source={StaticResource MyDataSource}}" DataContext="{Binding}" Margin="10">
			<DataGrid.RowStyle>
				<Style TargetType="DataGridRow">
					<Style.Triggers>
						<DataTrigger Binding="{Binding RowState}" Value="{x:Static data:DataRowState.Modified}" >
							<Setter Property="Background" Value="Red" />
						</DataTrigger>
						<DataTrigger Binding="{Binding RowState}" Value="{x:Static data:DataRowState.Unchanged}" >
							<Setter Property="Background" Value="Aquamarine" />
						</DataTrigger>
						<DataTrigger Binding="{Binding RowState}" Value="{x:Static data:DataRowState.Added}" >
							<Setter Property="Background" Value="Yellow" />
						</DataTrigger>
						<DataTrigger Binding="{Binding RowAction}" Value="{x:Static data:DataRowAction.Add}" >
							<Setter Property="Background" Value="Red" />
						</DataTrigger>
						<DataTrigger Binding="{Binding RowAction}" Value="{x:Static data:DataRowAction.Change}" >
							<Setter Property="Background" Value="Yellow" />
						</DataTrigger>
					</Style.Triggers>
				</Style>
			</DataGrid.RowStyle>
			<DataGrid.Columns>			
				<DataGridTextColumn Binding="{Binding Path=Col1}" Header="col1" />
				<DataGridTextColumn Binding="{Binding Path=Col2}" Header="col2"/>
			</DataGrid.Columns>
		</DataGrid>
	</Grid>
</Window>

C'est possible à faire en xaml ou pas ?

merci

Modifié par ElRed, 07 November 2011 - 12:40.

Je dis ca, mais dans 5mm je dirais peut etre le contraire...

#2
AnA-l

AnA-l

    Monde de merde !

  • Membre
  • PipPipPipPipPipPipPip
  • 7349 messages
  • Lieu:Rbx
A vue de nez et connaissant un peu WPF, je dirais que oui, juste il faut que le databinding soit correct et la ton
{x:Static data:DataRowAction.Change}
ca doit pas etre le bon. Apres, je laisse les experts repondre.

#3
ElRed

ElRed

    Senseï Geek

  • Membre
  • PipPipPipPipPip
  • 1307 messages
Bon, les experts sont scéptiques.

J'ai pas mal cherché sur le web 2.0 mais je n'ai pas trouvé de solution pour faire cela en xaml (ce qui m'embete un peu)
Je dis ca, mais dans 5mm je dirais peut etre le contraire...

#4
Styx31

Styx31

    Lord Jedi Geek

  • Membre
  • PipPipPipPip
  • 942 messages
  • Lieu:Toulouse
Je dirais que les DataTemplate avec des enums marchent à priori directement sur les valeurs de type string. Donc inutile je dirais de passer par un x:Static.

Je teste le reste demain et je regarde du code que j'ai déjà écrit pour voir comment j'ai fait.
C++ is like a watching an old movie you remembered fondly and then finding out that it really sucked - Rick Strahl
When C++ is your hammer, everything starts to look like your thumb - Anon

#5
ElRed

ElRed

    Senseï Geek

  • Membre
  • PipPipPipPipPip
  • 1307 messages

Voir le messageStyx31, le 09 November 2011 - 22:25, dit :

Je dirais que les DataTemplate avec des enums marchent à priori directement sur les valeurs de type string. Donc inutile je dirais de passer par un x:Static.

Je teste le reste demain et je regarde du code que j'ai déjà écrit pour voir comment j'ai fait.

Je suis toujours sauvagement interressé :)
Je dis ca, mais dans 5mm je dirais peut etre le contraire...

#6
Styx31

Styx31

    Lord Jedi Geek

  • Membre
  • PipPipPipPip
  • 942 messages
  • Lieu:Toulouse
Oui donc je viens de tester, ça fonctionne très bien chez moi avec ton code avec juste la modification dont j'ai parlé, à savoir :

<DataTrigger Binding="{Binding RowState}" Value="Modified">
	<Setter Property="Background" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding RowState}" Value="Unchanged" >
	<Setter Property="Background" Value="Aquamarine" />
</DataTrigger>
<DataTrigger Binding="{Binding RowState}" Value="Added" >
	<Setter Property="Background" Value="Yellow" />
</DataTrigger>
<DataTrigger Binding="{Binding RowAction}" Value="Add" >
	<Setter Property="Background" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding RowAction}" Value="Change" >
	<Setter Property="Background" Value="Yellow" />
</DataTrigger>

Mon code c# est le suivant :

public class MyDataProvider
{
	public List<MyLine> GetData()
	{
		return new List<MyLine>()
		{
			new MyLine { Col1 = "1", Col2 = "2"}
		};
	}
}

public class MyLine
{
	public string Col1 { get; set; }
	public string Col2 { get; set; }
	public DataRowState RowState { get { return DataRowState.Modified; } }
}

C++ is like a watching an old movie you remembered fondly and then finding out that it really sucked - Rick Strahl
When C++ is your hammer, everything starts to look like your thumb - Anon

#7
ElRed

ElRed

    Senseï Geek

  • Membre
  • PipPipPipPipPip
  • 1307 messages
merci.
J'étais partie sur une mauvaise piste du fait du type enumerable...je tournais un peu en rond alors que la syntaxe est toute bête.
Je dis ca, mais dans 5mm je dirais peut etre le contraire...




1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)