Bonjour,
J'ai un problème d'optimisation.
Je souhaite pouvoir filtrer les colonnes d'une grille avec autant de Textbox qu'il existe de colonne.
Le Textbox1 filtrant la colonne 1, peut se cumuler avec le Textbox2 qui filtre la colonne 2 etc...
De plus, la largeur de ces Textbox doit correspondre à celle de leurs colonnes respectives.
Ceci est "facile" à faire.
Je suis capable de créer un Textbox par colonne dans ma vue, de binder leur largeur sur celle de leur colonnes, de binder mon ViewModel sur la propriété Text, puis d'effectuer le filtrage de ma collection dans ce ViewModel.
Par contre, ceci m'oblige à créer dans ma vue un Textbox par colonne, presque tous identiques avec juste quelques valeurs différentes et autant de propriété dans mon ViewModel...
Dans ma vue, X Textbox :
1 2 3 4 5 6
|
<TextBox Width="{Binding ElementName=GridCol1, Path=Width.DisplayValue}" Background="LightGray" Text="{Binding TxtUserid}">
<TextBox.InputBindings>
<KeyBinding Key="Return" Command="{Binding FilterCmd}" CommandParameter="uid"/>
</TextBox.InputBindings>
</TextBox> |
Dans mon ViewModel, X propriété
public string TxtUserid { get; set; }
Je suis développeur je suis feignant, d'autant plus que ca passe pour 3/4 colonnes, mais pas plus ca devient contraignant
Je voudrai donc trouver un moyen de faire ca en "masse".
J'ai bien pensé à faire une collection de Textbox...
1 2 3 4 5 6
| class TxtBoxFilterViewModel
{
public string GridElementName { get; set; }
public string TextValue { get; set; }
public string CdeParam{ get; set; }
} |
1 2 3 4 5 6 7 8
| public ObservableCollection<TxtBoxFilterViewModel> TxtBoxFilter { get; set; }
public constructor()
{
TxtBoxFilter = new ObservableCollection<TxtBoxFilterViewModel>
{
new TxtBoxFilterViewModel{ GridElementName="GridCol1", CdeParam="uid"}
};
} |
Dans ma vue, une liste :
1 2 3 4 5 6 7 8 9 10 11 12
|
<ListView ItemsSource="{Binding TxtBoxFilter}" BorderBrush="Transparent" FontSize="12" FontWeight="Bold" ScrollViewer.CanContentScroll="False">
<ListView.ItemTemplate>
<DataTemplate>
<TextBox DataContext="{Binding TxtBoxFilter}" Width="{Binding ElementName=GridElementName, Path=Width.DisplayValue}" Text="{Binding TextValue}">
<TextBox.InputBindings>
<KeyBinding Key="Return" Command="{Binding FilterCmd}" CommandParameter="{Binding CdeParam}"/>
</TextBox.InputBindings>
</TextBox>
</DataTemplate>
</ListView.ItemTemplate>
</ListView> |
Mais j'ai un problème sur le binding de la largeur de colonne de ma grille (GridElementName), ca ne fonctionne pas.
Avez vous une façon de faire autre ou comment faire fonctionner celle ci?
Merci!
Partager