WPF程序绑定

本文关键字:绑定 程序 WPF | 更新日期: 2023-09-27 18:04:56

由于各种原因,我正试图将此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#代码不会编译,我很不明白为什么。

WPF程序绑定

PropertyPath的构造函数中,cell.Width获取值,如果是DP,则希望EventCell.ActualWidthProperty获取DP字段,或者使用字符串"ActualWidth"

当像这样翻译XAML时,只需在Binding构造函数中设置路径,该构造函数与XAML中使用的构造函数相同(因为路径不限定(:

Binding b = new Binding("ActualWidth");

(如果您的绑定被翻译回XAML,它将类似于{Binding Path=123.4, ...},请注意Path属性是限定的,因为您没有使用构造函数来设置它(

编辑:此外,绑定需要在EventCell.WidthProperty上设置,当然,你不能设置ActualWidth,看起来你的逻辑颠倒了。。。

我认为您需要让ActualWidthProperty抛出一个NotifyPropertyChanged事件。否则,绑定将不知道在属性更改时进行更新。每当我完成绑定时,我总是必须实现INotifyPropertyChanged

您可以尝试扩展列表视图类,然后在width属性上实现它。我在这里给出了类似的答案:WPF Toolkit DataGrid列调整大小事件