2013-05-22 21 views
1

我在尋找下面的一些幫助。我的視圖模型包含以下內容:所有分組作業(如特定類別的職位) 在多個數據網格的條件下進行綁定

  • 當前選定的組中的所有作業的列表的

    • 所有作業的列表
    • 列表。

    這在視圖中表示爲3個獨立的數據網格。

    • 之一來顯示所有作業
    • 一個顯示所有分組的作業
    • 一個當前選擇的組中顯示的所有作業。

    當前綁定允許當前組中的作業列表根據我在組作業視圖中選擇的組進行更改。

    我正在尋求幫助的是根據作業是否在當前選定的作業組列表中,將主作業列表的行背景顏色進行綁定。

    因此,如果我更改當前的作業組,則該組中的所有作業都將突出顯示。任何援助將不勝感激。

  • 回答

    2

    我通過結合DataGrid風格和MultiBinding觸發器和轉換器解決了這個問題。

    樣品XAML代碼:

    <Window.Resources> 
        <this:RowConverter x:Key="RowConverter" /> 
    </Window.Resources> 
    
    <Grid> 
        <DataGrid Name="dtGroups" HorizontalAlignment="Left" /> 
    
        <DataGrid Name="dtJobs" HorizontalAlignment="Right"> 
         <DataGrid.RowStyle> 
          <Style TargetType="DataGridRow"> 
           <Style.Triggers> 
            <DataTrigger Value="True"> 
             <DataTrigger.Binding> 
              <MultiBinding Converter="{StaticResource RowConverter}"> 
               <Binding Path="SelectedItem.Id" ElementName="dtGroups" /> 
               <Binding Path="GroupId" /> 
              </MultiBinding> 
             </DataTrigger.Binding> 
    
             <Setter Property="Background" Value="Green" /> 
            </DataTrigger> 
           </Style.Triggers> 
          </Style> 
         </DataGrid.RowStyle> 
        </DataGrid> 
    </Grid> 
    

    dtGroups是由類型的對象填充一個DataGrid

    public class JobGroup 
    { 
        public int Id { get; set; } 
        public string Name { get; set; } 
    } 
    

    dtJobs是由類型的對象填充一個DataGrid

    public class Job 
    { 
        public string Name { get; set; } 
        public int GroupId { get; set; } 
    } 
    

    下一頁,我檢查是否類別Job中的類與dtGroups中的所選作業組相同。這發生在轉換器:

    class RowConverter : IMultiValueConverter 
    { 
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
         if (values.Length != 2 || values[0] == null || values[1] == null) return false; 
    
         if (values[0].ToString() == values[1].ToString()) return true; 
    
         return false; 
        } 
    
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
        { 
         throw new NotImplementedException(); 
        } 
    } 
    
    +0

    完美,我結束了使用MultiBinding並將兩個值傳遞給轉換器。感謝您的幫助。 –