J'essaie de convertir cette liaison xaml en une contrepartie en C # pour diverses raisons:
<ListView x:Name="eventListView" Grid.Column="0" Grid.Row="1" Background="LightGray" BorderThickness="0">
<local:EventCell x:Name="cell" Width="{Binding ActualWidth, Converter={StaticResource ListViewWidthConverter}, ElementName=eventListView, Mode=OneWay}"/>
</ListView>
J'ai déjà lu beaucoup de questions qui avaient des problèmes similaires et suis venu avec ce code:
Binding b = new Binding();
b.Source = eventListView;
b.Path = new PropertyPath(cell.Width);
b.Converter = new ListViewWidthConverter();
b.Mode = BindingMode.OneWay;
cell.SetBinding(ListView.ActualWidthProperty, b);
Mais le code C # ne compilera pas, je ne sais trop pourquoi.
Dans le constructeur de la variable PropertyPath
, le cell.Width
obtient la valeur. Vous voulez soit que EventCell.ActualWidthProperty
obtienne le champ DP s'il s'agit d'un DP, ou utilisez la chaîne "ActualWidth"
.
Lorsque vous traduisez XAML comme ceci, définissez simplement le chemin dans le constructeur Binding, qui est le même que celui utilisé dans XAML (car le chemin n'est pas qualifié):
Binding b = new Binding("ActualWidth");
(Si votre liaison devait être convertie en XAML, ce serait quelque chose comme {Binding Path=123.4, ...}
, notez que la propriété Path
est qualifiée car vous n'avez pas utilisé le constructeur pour la définir)
Edit: La liaison doit également être définie sur le EventCell.WidthProperty
bien sûr, vous ne pouvez pas définir la ActualWidth
, il semble que votre logique ait été inversée ...
Je crois que vous devez faire en sorte que ActualWidthProperty
jette un événement NotifyPropertyChanged
. Sinon, la liaison ne saura pas se mettre à jour lorsque la propriété sera modifiée. Chaque fois que j'ai fait des liaisons, je devais toujours implémenter INotifyPropertyChanged
.
Vous pouvez essayer d'étendre la classe d'affichage de liste, puis de l'implémenter dans la propriété width. J'ai donné une réponse similaire ici: Evénement de redimensionnement de colonne WPG Toolkit DataGrid