I am attempting to convert this xaml binding to it’s C# counterpart for various reasons:
<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>
I’ve read a lot of questions already that had similar problems and came up with this 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);
But the C# code won’t compile, I am pretty lost as to why.
In the constructor of the
PropertyPaththecell.Widthgets the value, you either wantEventCell.ActualWidthPropertyto get the DP-field if it is a DP, or use the string,"ActualWidth".When translating XAML like this, just set the path in the Binding constructor which is the same constructor used in XAML (as the path is not qualified):
(If your binding were to be translated back to XAML it would be something like
{Binding Path=123.4, ...}, note that thePathproperty is qualified as you did not use the constructor to set it)Edit: Also the binding needs to be set on the
EventCell.WidthPropertyof course, you cannot set theActualWidth, it seems your logic was inverted…