2015-02-09 129 views
0

我已經使用了這一點,但似乎無法找到解釋爲什麼這不起作用的來源。索引列表項的屬性綁定

如果我有這段代碼:

public class FastData : INotifyPropertyChanged 
{ 
    private IList<FastDataVectors> fdvectors; 
    public IList<FastDataVectors> fdVectors {get { return fdvectors; } set { if (fdvectors == value) return; SetProperty(ref fdvectors, value); } } 

    private IList<float> fdfloat; 
    public IList<float> fdFloat {get { return fdfloat; } set { if (fdfloat == value) return; SetProperty(ref fdfloat, value); } } 
... 
} 

public class FastDataVectors : INotifyPropertyChanged 
{ 
    private float fdvangle; 
    public float fdvAngle {get { return fdvangle; } set { if (fdvangle == value) return; SetProperty(ref fdvangle, value); } } 
... 
} 

private FastData myfastdata; 
public FastData myFastData {get { return myfastdata; } set { if (myfastdata == value) return; SetProperty(ref myfastdata, value); } } 

private List<FastDataVectors> myfastdatavectors; 
public List<FastDataVectors> myFastDataVectors {get { return myfastdatavectors; } set { if (myfastdatavectors == value) return; SetProperty(ref myfastdatavectors, value); } } 

... 
myFastData = new FastData(); 
myFastData.fdVectors = new List<FastDataVectors>(); 
myFastData.fdVectors.Add(new FastDataVectors() {fdvAngle = 10}); 
myFastData.fdVectors.Add(new FastDataVectors() {fdvAngle = 20}); 

myFastData.fdFloat.Add(10); 
myFastData.fdFloat.Add(20); 

,並在XAML這個文本塊

<TextBlock Text="{Binding myFastData.fdVectors[0].fdvAngle}"/> 
<TextBlock Text="{Binding myFastData.fdVectors[1].fdvAngle}"/> 

我希望它顯示「10 & 20」,但我只是得到一個結合錯誤,奇怪的是「......指定的參數超出了有效值的範圍」。

但是,如果我嘗試這一塊XAML的它完美的作品:

<TextBlock Text="{Binding myFastData.fdFloat[0]}"/> 
<TextBlock Text="{Binding myFastData.fdFloat[1]}"/> 

我真的不知道我在尋找和「WPF C#結合性的谷歌搜索的前幾頁索引數組列表「,不要返回任何可能解釋這一點的內容。

所以真正的問題是雙重的:

1)爲什麼不這項工作?

2)除了我如何解決這個問題外,是否有更好的方法來解決我想要做的事情?

注意:這是我剛剛編寫的一個簡化的代碼塊,可能包含錯誤和代碼省略的奇數位以說明。

編輯:我更新了代碼以更好地表示我實際上在做什麼。我也不能使用ObservableCollection,因爲我正在使用Telerik DataAccess工具,該工具將類關閉到SQLite數據庫。即使看着Telerik已經記錄的定製流暢集合方法,在我的場景中也是不可能的,因爲主要數據類在PCL中,這限制了我。

謝謝...

回答

0

它不工作,因爲WPF沒有辦法知道你已經添加了什麼fdVectors的方式。

如果您希望WPF對添加/減法作出反應,則需要使用ObservableCollection<T>而不是List<T>

無論是你的發佈代碼都不是你正在運行的。我掙扎看到這甚至如何編譯:

myFastDataVectors = new List<FastDataVectors>(); 
myFastDataVectors.fdvAngle = 10; 

myFastDataVectors一個ListFastDataVectors

+0

你是對的,代碼是不正確的。我現在更新了。我被迫使用IList,因爲它全部與Telerik DataAccess工具一起使用,後者返回到SQLite數據庫。我曾經廣泛使用的ObservableCollection全部被IList取代。現在我以更有條理的方式構建用戶界面,我遇到了這個問題。我的印象是,IList在東西改變時仍然給你通知觸發器。 – MikeyTT 2015-02-09 14:32:29

+0

我認爲的原因是Float的List值在UI中得到更新而沒有任何問題 – MikeyTT 2015-02-09 14:35:00

+0

我只能假設你在添加了浮動元素後以某種方式觸發綁定更新。設置myFastData的東西)。再次,只能猜測,因爲看不到真正的代碼。 – GazTheDestroyer 2015-02-09 14:38:09