0
這不是一件容易的事。綁定到數組元素不會更新
我有一個listbox(elementSelection)和一個文本塊(elementViewer)。 elementViewer顯示數組的一個元素,它由elementSelection框選擇。所有這些工作,即使我編程修改數組中的一個元素的變化反映在elementViewer。 下面是代碼:
public class ArrElem : INotifyPropertyChanged
{
public ArrElem(double d)
{
wert = d;
}
private double intwert;
public double wert
{
get { return intwert; }
set
{
intwert = value;
NotifyPropertyChanged("wert");
}
}
// Declare the PropertyChanged event
public event PropertyChangedEventHandler PropertyChanged;
// NotifyPropertyChanged will raise the PropertyChanged event passing the
// source property that is being updated.
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
private ObservableCollection<ArrElem> arrField = new ObservableCollection<ArrElem>();
public ObservableCollection<ArrElem> Arr { get { return arrField; } set { arrField = value; } }
private ObservableCollection<int> indexArrField = new ObservableCollection<int>();
public ObservableCollection<int> indexArr { get { return indexArrField; } set { indexArrField = value; } }
public MainWindow()
{
Arr.Add(new ArrElem(1.1));
Arr.Add(new ArrElem(2.2));
for (int i = 0; i < Arr.Count; i++)
{
indexArr.Add(i);
}
InitializeComponent();
DataContext = this;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// this one doesn't show on elementViewer
//double d = Arr[0].wert + 0.1;
//Arr.RemoveAt(0);
//Arr.Insert(0, new ArrElem(d));
// this one shows on elementViewer
Arr[0].wert += 0.1;
}
public class MySpecialMultiConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
int i = int.Parse(values[0].ToString());
ObservableCollection<ArrElem> arr = values[1] as ObservableCollection<ArrElem>;
if (arr == null || i >= arr.Count || i < 0)
return DependencyProperty.UnsetValue;
return arr[i];
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
object[] ooo = new object[1];
ooo[0] = DependencyProperty.UnsetValue;
return ooo;
}
}
<local:MySpecialMultiConverter x:Key="multiConverter" />
<ListBox Name="elementSelection" ItemsSource="{Binding indexArr}"></ListBox>
<TextBlock Name="elementViewer" Text="{Binding Path=wert}" >
<TextBlock.DataContext>
<MultiBinding Converter="{StaticResource multiConverter}">
<Binding ElementName="elementSelection" Path="SelectedIndex" />
<Binding Path="Arr" />
</MultiBinding>
</TextBlock.DataContext>
</TextBlock>
現在我的問題: 正如你在Button_Click的代碼中看到,這些變化對個人ArrElem在elementViewer顯示出來,但如果我更換ArrElem elementViewer不更新。
在兩種情況下,我必須更改以獲取elementViewer的更新?
不,SelectedIndex不會改變,它無助於重新設置。 不,我不能直接綁定到SelectedItem沒有轉換器,因爲我不會訪問數組元素然後(或者至少我不知道如何)。 – MTR 2011-03-25 10:03:09
'SelectedItem'是數組元素。 – 2011-03-25 10:04:01
對不起,我沒有看到這個。但它沒有幫助,SelectedItem是indexArr的元素,而不是Arr的元素。我需要這個indexArray,因爲在我的應用程序中應該有可能選擇當前不存在的數組元素。 – MTR 2011-03-25 10:47:33