Trong WPF4.0, tôi có một lớp có chứa các loại lớp khác làm thuộc tính (kết hợp nhiều kiểu dữ liệu để hiển thị). Một cái gì đó như:ItemsControl ItemTemplate Binding
public partial class Owner
{
public string OwnerName { get; set; }
public int OwnerId { get; set; }
}
partial class ForDisplay
{
public Owner OwnerData { get; set; }
public int Credit { get; set; }
}
Trong cửa sổ của tôi, tôi có một ItemsControl như sau (cắt bớt cho rõ ràng):
<ItemsControl ItemsSource={Binding}>
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyDisplayControl
OwnerName={Binding OwnerData.OwnerName}
Credit={Binding Credit} />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
sau đó tôi nhận được một tập hợp các thông tin hiển thị từ các lớp dữ liệu, và thiết lập DataContext
của số ItemsControl
vào bộ sưu tập này. Thuộc tính "Tín dụng" được hiển thị chính xác, nhưng thuộc tính OwnerName thì không. Thay vào đó, tôi nhận được một lỗi ràng buộc:
Error 40: BindingExpression path error: 'OwnerName' property not found on 'object' ''ForDisplay' (HashCode=449124874)'. BindingExpression:Path=OwnerName; DataItem='ForDisplay' (HashCode=449124874); target element is 'TextBlock' (Name=txtOwnerName'); target property is 'Text' (type 'String')
Tôi không hiểu tại sao điều này đang nỗ lực để tìm kiếm tài sản OwnerName trong lớp ForDisplay, chứ không phải trong lớp Chủ đầu tư từ tài sản ForDisplay OwnerData.
Chỉnh sửa Dường như nó có liên quan đến việc sử dụng điều khiển tùy chỉnh. Nếu tôi liên kết các thuộc tính giống với một số TextBlock
, chúng hoạt động chính xác.
<ItemsControl ItemsSource={Binding}>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<local:MyDisplayControl
OwnerName={Binding OwnerData.OwnerName}
Credit={Binding Credit} />
<TextBlock Text="{Binding OwnerData.OwnerName}" />
<TextBlock Text="{Binding Credit}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Bằng cách nào đó, nó đang cố gắng để tìm thấy những tài sản trên đối tượng ForDisplay OwnerName. Sử dụng liên kết sau để gỡ lỗi: http://wpftutorial.net/DebugDataBinding.html. Một câu hỏi nữa, thuộc tính OwnerName trên MyDisplayControl thuộc tính phụ thuộc của bạn? – decyclone
Tôi thấy không có gì sai, giả sử những gì bạn cắt bớt là không che giấu bất cứ điều gì có liên quan. Bạn đã thử làm sạch/xây dựng lại giải pháp chưa? Tôi ghét đề nghị này vì nó tương đương với việc nói với bạn để "khởi động lại", nhưng tôi có một tình huống databinding rằng NÊN làm việc nhưng không, tôi thấy rằng một sạch/xây dựng lại đôi khi sửa chữa nó. Không chắc chắn lý do tại sao. –
Dự đoán dự đoán: thay đổi Ràng buộc để đặt đường dẫn rõ ràng. tức là "OwnerName = {Binding Path = OwnerData.OwnerName}" –