2015-04-17 50 views
4

我有ListView與同一列中的不同單元格(通過使用DataTemplateSelector實現)。這是很簡單的例子:動態綁定 - 根據列解析屬性名稱

<ListView ItemsSource="{Binding Items}"> 
    <ListView.Resources> 
     <l:ResultsSelector x:Key="result1"> 
      <l:ResultsSelector.TemplateResult> 
       <DataTemplate> 
        <TextBlock Text="{Binding Result1}"/> <!-- how to make this dynamic? --> 
       </DataTemplate> 
      </l:ResultsSelector.TemplateResult> 
      ... 
     </l:ResultsSelector> 
    ... 
    </ListView.Resources> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Result1" CellTemplateSelector="{StaticResource result1}"/> 
      <!-- would be nice to use same selector for all columns --> 
      <GridViewColumn Header="Result2" CellTemplateSelector="{StaticResource result2}"/> 
      <GridViewColumn Header="Result3" CellTemplateSelector="{StaticResource result3}"/> 
      ... 
     </GridView> 
    </ListView.View> 
</ListView> 

視圖模型:

private ObservableCollection<Item> _items; 
public ObservableCollection<Item> Items 
{ 
    get { return _items; } 
    set 
    { 
     _items = value; 
     OnPropertyChanged(); 
    } 
} 

public class Item: NotifyPropertyChangedBase 
{ 
    public string Result1 {get; set;} 
    public string Result2 {get; set;} 
    public string Result3 {get; set;} 
    ... 
} 

問題ResultSelector是所有的結果列相同(也有其他列),唯一的區別是名稱綁定屬性:列 「結果1」 這是Result1IsResult1等,爲 「結果2」 - Result2IsResult2

目的:我想定義選擇器只是一次(正如我前面所說,這是非常簡化的版本,所以複製/粘貼「result1」選擇器定義N時間是非常糟糕的選擇,特別是如果我必須稍後改變某些東西)並以某種方式將其用於所有列。

問題:有沒有辦法組織動態綁定。 動態我的意思是根據列動態解析屬性名稱。

轉換器? UserControl?想法?

回答

0

會像

public String Name 
    { 
     get { return name; } 
     set { name = value; OnPropertyChanged("name"); } 
    } 

public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 

是一種可能性?這樣您至少可以生成字符串並將其作爲參數添加到OnPropertyChanged中。

+0

我想你誤解了我的問題。查看選擇器模板之一中的「TextBlock」。它被綁定到'Result1',這沒有問題,它顯示正確的值。問題是避免創建另一個選擇器(在xaml中定義它),其中相同的「TextBlock」將被綁定到例如'Result2'。 – Sinatr

+0

好的,所以這是我發佈的相反情況。代替泛型代碼,您需要一個通用的XAML {綁定結果}? – Ben

+0

是的,其中「Result2」屬性顯示在「Result2」列中的「Result」值。 – Sinatr