Nói rằng tôi đã có một số TextBlocks trên giao diện người dùng của tôi, một cái gì đó giống như vậy:Binding trong WPF để phần tử của mảng được xác định bởi tài sản
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding DessertIndex}" />
<TextBlock Text="{Binding Food[2]}" />
<TextBlock Text="{Binding Food[{Binding DessertIndex}]}" />
</StackPanel>
và trong mã của tôi đằng sau tôi đã có một cái gì đó như thế này:
public partial class MainWindow : Window
{
public int DessertIndex
{
get { return 2; }
}
public object[] Food
{
get
{
return new object[]{"liver", "spam", "cake", "garlic" };
}
}
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
}
Hai TextBlocks đầu tiên hiển thị tốt cho tôi, hiển thị 2 và 'bánh' tương ứng. Điều thứ ba không thực hiện được những gì tôi muốn, cụ thể là sử dụng thuộc tính DessertIndex để chỉ mục vào mảng đó và cũng hiển thị 'bánh'. Tôi đã làm một chút tìm kiếm ở đây trên SO cho một câu hỏi tương tự nhưng không tìm thấy một. Cuối cùng, tôi không muốn chỉ định các giá trị như 2 trong tệp .xaml của tôi và muốn dựa vào thuộc tính thay vì để lập chỉ mục vào mảng đó. Điều này có thể không? Nếu vậy, tôi đang làm gì sai ở đây?
EDIT:
Vì vậy, những gì tôi chặt chẽ hơn có là một tình huống mà các dữ liệu là một danh sách các đối tượng [] và tôi đang sử dụng trên StackPanel như một phần của một DataTemplate cho một ListBox. Vì vậy, ý tưởng, như Mark Heath cho thấy dưới đây, sử dụng một tài sản mà dereferences mảng dường như không hoạt động như tôi muốn. Ý tưởng?
Cảm ơn Colin - điều này hoạt động rất tốt cho ứng dụng thử nghiệm của tôi và nghi ngờ nó sẽ hoạt động tốt trong thực tế. Đó là một ngày tốt lành - tôi đã học được điều gì đó thực sự thú vị từ bạn. :) – itsmatt
Bạn có thể bị cám dỗ để thử một cái gì đó khác nhau bằng cách sử dụng một ConverterParameter để tránh multibinding. Thật không may, điều đó sẽ dẫn đến hư không, vì ConverterParameter không thể sử dụng một ràng buộc vì nó không phải là DependencyProperty và bạn phải sử dụng MultiBinding –