Я пытаюсь преобразовать эту привязку xaml в ее аналог на C # по разным причинам:
<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>
Я уже прочитал много вопросов, в которых были похожие проблемы, и придумал этот код:
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);
Но код C # не компилируется, я симпатичный потерял, почему.
В конструкторе PropertyPath
значение cell.Width
получает значение, либо вы хотите, чтобы EventCell.ActualWidthProperty
получило поле DP, если оно является DP, либо используйте строку "ActualWidth"
.
При переводе XAML таким образом, просто установите путь в конструкторе Binding, который является тем же конструктором, который используется в XAML (поскольку путь не определен):
Binding b = new Binding("ActualWidth");
(Если ваша привязка должны были быть переведены обратно в XAML, это было бы что-то вроде {Binding Path=123.4, ...}
, обратите внимание, что свойство Path
квалифицировано, поскольку вы не использовали конструктор для его установки)
Редактировать: Также необходимо установить привязку на EventCell.WidthProperty
, конечно, вы не можете установить ActualWidth
, похоже, ваша логика была инвертирована ...