Привязка WPF программно

Я пытаюсь преобразовать эту привязку 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 # не компилируется, я симпатичный потерял, почему.

18
задан Cœur 2 August 2017 в 13:34
поделиться

1 ответ

В конструкторе 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, похоже, ваша логика была инвертирована ...

21
ответ дан 30 November 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: