Tôi sử dụng biểu dữ liệu để trực quan hóa một số mục trong ComboBox, ItemsSource được gắn với ObservableCollection. Để giữ cho nó đơn giản, giả sử tôi đặt người vào ObservableCollection:Đặt TextSearch.Tiếp theo cho WPF-ComboBoxItem qua DataTemplate
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
My DataTemplate trông như thế này:
<DataTemplate TargetType="{x:Type Person}">
<StackPanel Orientation="Horizontal">
<TextSearch.Text>
<MultiBinding StringFormat="{} {0} {1}">
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
</MultiBinding>
</TextSearch.Text>
<TextBlock Text="{Binding FirstName}" Margin="2,0" />
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</DataTemplate>
Bây giờ tôi muốn để cho phép tự động gõ cho tên đầy đủ trong ComboBox mà không giới thiệu một thứ ba tài sản trên lớp người của tôi. Do đó tôi không muốn sử dụng TextSearch.TextPath bất động sản trên ComboBox, nhưng thay vào đó tôi muốn ràng buộc TextSearch.Text-Property của mỗi ComboBoxItem trong DataTemplate. Thật không may, khi tôi làm điều này (mà làm việc với một MultiBinding và StringFormat, thử nghiệm với Snoop), giá trị ràng buộc chỉ được đăng ký cho StackPanel của tôi, nhưng sử dụng Snoop (công cụ tuyệt vời) tôi thấy rằng stackpanel này phục vụ như nội dung cho một số ComboBoxItemTemplate, mà đặt một biên giới vv và cuối cùng là một ComboBoxItem-tag xung quanh StackPanel bên ngoài của tôi. Do đó, thiết lập TextSearch.Text không hiệu quả, vì nó phải được đặt trong ComboBoxItem đã tạo và không phải ở đâu đó bên trong.
Câu hỏi ngay: Làm cách nào để tôi có thể tuyên truyền TextSearch này.Tiếp tục thuộc tính từ DataTemplate của tôi tới ComboBoxItem xung quanh bằng XAML-Styles và -Control-Templates? Giải pháp có thể sửa đổi các ControlTemplates mặc định của ComboBox và ComboBoxItem và DataTemplate tùy chỉnh (Item-) của tôi, nhưng không sử dụng bất kỳ Code-Behind nào, hoặc ít nhất là không quá nhiều. Có lẽ một hành vi đính kèm cũng sẽ ổn thôi. Nhưng tôi gần như chắc chắn phải có một cách để làm cho nó làm việc mà không có, TemplateBinding hoặc RelativeSource-stuff ... Và tất nhiên giải pháp phải làm cho lựa chọn bàn phím của tôi và công việc textcompletion, s.th. khi danh sách có chứa Hans Josef và Hans Peter, sau đó nhập 'Hans' nên tự động đề nghị Hans Josef, trong khi nhập 'Hans P' đủ nhanh nên tự động đề nghị Hans Peter.
Bất kỳ giải pháp?
Ít nhất là bây giờ tôi cảm thấy khá tự tin, rằng nhiệm vụ thực sự không quá dễ dàng. Hoặc văn bản dài chỉ làm cho mọi người bỏ chạy trong hoảng loạn ... –
Tôi gần để từ bỏ nó. Tôi quản lý để có được ComboBoxItem để thực hiện đúng TextSearch.Text-bất động sản bằng cách thiết lập nó trong ComboBox.ItemContainerStyle (thay vì ItemTemplate, như tôi đã làm trước). Bây giờ có vẻ khá đẹp trong cây thị giác (Snoop một lần nữa), nhưng tiếc là nó không có hiệu lực. Không có lựa chọn nào được thực hiện sau khi gõ 'Hans' hoặc bất cứ điều gì. –