it-swarm.com.de

WPF-Bindung programmgesteuert

Ich versuche, diese Xaml-Bindung aus verschiedenen Gründen in ihr C # -Gleichstück umzuwandeln:

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

Ich habe bereits viele Fragen gelesen, die ähnliche Probleme hatten und mit diesem Code aufkamen:

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);

Aber der C # -Code wird nicht kompiliert, ich bin mir ziemlich nicht sicher, warum.

17
xvpower

Im Konstruktor der PropertyPath erhält der cell.Width den Wert. Entweder soll EventCell.ActualWidthProperty das DP-Feld erhalten, wenn es sich um einen DP handelt, oder die Zeichenfolge "ActualWidth".

Wenn Sie XAML wie folgt übersetzen, legen Sie einfach den Pfad im Binding-Konstruktor fest, der dem in XAML verwendeten Konstruktor entspricht (da der Pfad nicht qualifiziert ist):

Binding b = new Binding("ActualWidth");

(Wenn Ihre Bindung zurück in XAML übersetzt werden sollte, wäre dies etwa {Binding Path=123.4, ...}. Beachten Sie, dass die Path-Eigenschaft qualifiziert ist, da Sie sie nicht mit dem Konstruktor festgelegt haben.)

Editieren: Außerdem muss die Bindung für den EventCell.WidthProperty festgelegt werden. Sie können die ActualWidth nicht festlegen, es scheint, dass Ihre Logik invertiert war ...

20
H.B.

Ich glaube, dass Sie die ActualWidthProperty ein NotifyPropertyChanged-Ereignis auslösen müssen. Andernfalls kann die Bindung nicht aktualisiert werden, wenn sich die Eigenschaft ändert. Immer wenn ich Bindungen gemacht habe, musste ich immer INotifyPropertyChanged implementieren.

Sie können versuchen, die Listensichtklasse zu erweitern und anschließend in der width -Eigenschaft zu implementieren. Ich habe hier eine ähnliche Antwort gegeben: WPF Toolkit DataGrid-Spalte Größenänderungsereignis

0
Chad La Guardia