gpt4 book ai didi

.net - 绑定(bind)到数组元素

转载 作者:行者123 更新时间:2023-12-04 00:12:05 26 4
gpt4 key购买 nike

我正在尝试将 TextBlock 绑定(bind)到 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 的第一个值。
但这并不反射(reflect)此元素的任何更改。
为了在我的文本框中看到对 Arr[0] 的更改,我需要做什么?

最佳答案

不需要转换器。可以直接绑定(bind)Arr[0]像这样

 <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; }

并绑定(bind)到
 <TextBlock Name="testBox" Text="{Binding Path=Arr[0].Value}"/>

关于.net - 绑定(bind)到数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5415858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com