Tôi có một số ListBox
liên kết với bộ sưu tập con trên ViewModel. Các mặt hàng listbox được theo kiểu trong một datatemplate dựa trên một tài sản trên ViewModel mẹ:Truy cập dữ liệu gốc của DataContext từ DataTemplate
<Style x:Key="curveSpeedNonConstantParameterCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.CurveSpeedMustBeSpecified,
ElementName=someParentElementWithReferenceToRootDataContext}"
Value="True">
<Setter Property="Control.Visibility" Value="Hidden"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
tôi nhận được lỗi đầu ra sau đây:
System.Windows.Data Error: 39 : BindingExpression path error:
'CurveSpeedMustBeSpecified' property not found on
'object' ''BindingListCollectionView' (HashCode=20467555)'.
BindingExpression:Path=DataContext.CurveSpeedMustBeSpecified;
DataItem='Grid' (Name='nonConstantCurveParametersGrid');
target element is 'TextBox' (Name='');
target property is 'NoTarget' (type 'Object')
Vì vậy, nếu tôi thay đổi biểu thức ràng buộc để "Path=DataContext.CurrentItem.CurveSpeedMustBeSpecified"
nó hoạt động , nhưng chỉ miễn là datacontext của điều khiển người dùng gốc là BindingListCollectionView
. Điều này không được chấp nhận vì phần còn lại của điều khiển người dùng liên kết với các thuộc tính của số CurrentItem
trên số BindingList
tự động.
Làm cách nào để chỉ định biểu thức ràng buộc bên trong kiểu để nó hoạt động bất kể ngữ cảnh dữ liệu gốc là chế độ xem bộ sưu tập hay một mục duy nhất?
Tôi có mã chính xác trong dự án của tôi nhưng nó bị rò rỉ ViewModels (Finalizer không được gọi, Command ràng buộc dường như giữ lại DataContext). Bạn có thể xác minh rằng vấn đề này tồn tại cho bạn không? –
@Juve công trình này, nhưng nó có thể làm điều này để nó sẽ cháy cho tất cả các itemscontrols thực hiện cùng một mẫu? Tên là duy nhất vì vậy sau đó chúng tôi sẽ cần một mẫu riêng biệt cho mỗi, trừ khi tôi đang thiếu một cái gì đó. – Chris
@Juve bỏ qua cuối cùng của tôi, tôi đã nhận nó để làm việc bằng cách sử dụng người thân với findancestor và tìm kiếm theo tổ tiên, (vì vậy tất cả như nhau ngoại trừ không tìm kiếm theo tên). Trong trường hợp của tôi, tôi lặp lại việc sử dụng ItemsControls mỗi cái thực hiện một mẫu để tôi trông như thế này: Command = "{Binding RelativeSource = {RelativeSource FindAncestor, AncestorType = {x: Type ItemsControl}}, Path = DataContext.OpenDocumentBtnCommand}" – Chris