2011-05-18 80 views
2

我有一個ListView有幾列。我沒有問題,每個GridViewColumn綁定的屬性,例如:列表視圖中的多重綁定

<ListView ItemsSource="{Binding MyList}"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn DisplayMemberBinding="{Binding Name}"> 
       <GridViewColumnHeader Content="Name"/> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

當我嘗試多路捆綁一個GridViewColumn兩個性質的問題開始:

<GridViewColumn> 
    <GridViewColumn.DisplayMemberBinding> 
     <MultiBinding Converter="{StaticResource DisplayMemberConverter}"> 
      <Binding Path="HighestScore"/> 
      <Binding Path="IsHighestScoreApplicable"/> 
     </MultiBinding> 
    </GridViewColumn.DisplayMemberBinding> 
    <GridViewColumnHeader Content"Highest_Score"/> 

我使用轉換器在這裏給出:

public class DisplayMemberConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    {    
     int int_value = (int)values[0]; 
     bool bool_value = (bool)values[1]; 

     if (bool_value == true) 
      return int_value; 

     return null; 
    } 

    ...  
} 

我想達到的效果,當'IsHighestScoreAp plicable'屬性是錯誤的 - 列表視圖(空)上沒有顯示任何內容,並且當它爲真時 - 顯示HighestScore值,但那不成立 - 即使在'IsHighestScoreApplicable'時,我所得到的全部是空列真正。 此外,當我調試轉換()方法,我可以看到,如果聲明:

if (bool_value == true) 

成立,並且返回的值是int_value,但仍沒有顯示出來的列表視圖。

怎麼了?

所有最好的, 戴夫

回答

0
DisplayMemberBinding

是,顧名思義,而不是一個值,而是具有約束力的朝向應被顯示的構件(屬性)指出。如果您有複雜的檢索方式,則可以使用CellTemplate

爲了說明上述的解釋:你的轉換器可以返回DisplayMemberBinding="42"這看起來很關閉,因爲沒有綁定或成員被發現

0

試試看

if (bool_value == true) 
     return int_value.ToString(); 

它的工作當我再現你的問題

7

幾分鐘前,我需要在一個列表視圖multibinding。

我怎麼做的:

我爲小區一個DataTemplate。數據模板包含一個文本塊,在該文本塊上進行多重綁定。

<ListView Margin="33,0,0,0" ItemsSource="{Binding HourRegistry}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Width="200" Header="Worker" > 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock> 
           <TextBlock.Text> 
            <MultiBinding StringFormat="{}{0} {1}"> 
             <Binding Path="Employee.FirstName" /> 
             <Binding Path="Employee.Name" /> 
            </MultiBinding> 
           </TextBlock.Text> 
          </TextBlock> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Width="100" Header="Job" DisplayMemberBinding="{Binding Path=Keycode}"/> 
      </GridView> 
     </ListView.View> 

也許遲,但方便其他人