Dot-Net
綁定到數組元素
我正在嘗試將 TextBlock 綁定到 ObservableCollection 中的特定元素。這就是我現在所做的:
private ObservableCollection<double> arr = new ObservableCollection<double>(); public ObservableCollection<double> Arr { get { return arr; } set { arr = value; } } testBox.DataContext = this; private void Button_Click(object sender, RoutedEventArgs e) { Arr[0] += 1.0; } [ValueConversion(typeof(ObservableCollection<double>), typeof(String))] public class myObsCollConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { ObservableCollection<double> l = value as ObservableCollection<double>; if( l == null ) return DependencyProperty.UnsetValue; int i = int.Parse(parameter.ToString()); return l[i].ToString(); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return DependencyProperty.UnsetValue; } } <Window.Resources> <local:myObsCollConverter x:Key="myConverter"/> </Window.Resources> <TextBlock Name="testBox" Text="{Binding Path=Arr,Converter={StaticResource myConverter}, ConverterParameter=0}" />我看到的是 testBox 在創建時顯示了 Arr 的第一個值。但這並不反映此元素的任何更改。我必須做什麼才能看到 Arr 的變化
在我的文本框中?
不需要轉換器。你可以直接綁定到
Arr[0]like this<TextBlock Name="testBox" Text="{Binding Path=Arr[0]}"/>中的元素
Arr需要實現INotifyPropertyChanged才能動態更新。更新:詳細說明一下:
public class MyDouble : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private double _Value; public double Value { get { return _Value; } set { _Value = value; OnPropertyChanged("Value"); } } void OnPropertyChanged(string propertyName) { var handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } }然後
ObservableCollection<MyDouble> Arr { get; set; }並綁定到
<TextBlock Name="testBox" Text="{Binding Path=Arr[0].Value}"/>