您遇到的問題是您試圖綁定到函數的結果,並且您可能會通過試圖在代碼隱藏的簡單代碼上實現數據綁定而使事情複雜化。我建議從代碼隱藏中做到這一點。
這就是說,對於最簡單和最有用的方法,您需要在類中綁定到實際屬性,而在索引更改時需要更新這些屬性。根據你傳遞數據的方式,這可以減少代碼隱藏,或者只是創建更多。
這裏是你可以用到底是什麼了一個例子:
// Assume 1 of your textboxes displays a weight. Here's the property declaration:
// Disclaimer: Not compiled or tested at all.
public static readonly DependencyProperty WeightProperty = DependencyProperty.Register(
"Weight", typeof(double), typeof(MyClass), new PropertyMetadata(0.0));
public double Weight
{
get { return (double)this.GetValue(WeightProperty); }
set { this.SetValue(WeightProperty); }
}
// Here's an example of setting the property:
private void ComboBoxSelectedIndexChanged(object sender, RoutedEventArgs e)
{
List<double> values = myObject.GetValues(comboBox.SelectedIndex);
this.Weight = values[0];
}
// And in your XAML, assuming you've given your Window the name myWindow:
<TextBlock Text="{Binding ElementName=myWindow, Path=Weight}"/>
如果你打算更新在多個地方Weight屬性,並希望將TextBlock始終顯示正確的值這可能是有用的。
在另一方面,如果你的屬性將在SelectedIndexChanged
功能僅更新,你不需要該功能以外的值,你可能也剛剛爲自己設定的值,並減少不必要的開銷:
private void ComboBoxSelectedIndexChanged(object sender, RoutedEventArgs e)
{
List<double> values = myObject.GetValues(comboBox.SelectedIndex);
txtWeight.Text = values[0].ToString();
}
感謝您的優秀建議!我最終可能會使用混合解決方案,即我將創建一個具有必要的依賴屬性的類,並且此類中的值將通過組合框selectchanged事件處理程序在代碼隱藏中更改。然後我將使用數據綁定來訪問值。我還沒有看到這種方法對於我的GUI的其他部分是否有意義。 – Dave
請問我還有其他一些問題 - 一切都很好,但現在我又添加了兩個我需要綁定的對象。它們與我以前使用的類型相同(當然,它是從DependencyObject派生的)。如何指定我想要的源?我嘗試使用綁定的Source屬性,即 Text =「{Binding Source = _my_object,Path = MyValue}」 但是它編譯不起作用 - 文本只是空白。我究竟做錯了什麼? – Dave
在代碼中設置源並僅設置綁定中的路徑。 XAML中的「{Binding Path = MyValue}」和'myTextBlock。來源= myObject;'在C# –