web-dev-qa-db-fra.com

Liaison WPF par programme

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.

17
xvpower

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 ...

20
H.B.

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

0
Chad La Guardia