2016-02-24 47 views
0

objective 我的目標是根據viewmodel中的屬性在GridView行中加載Control。DataTemplate中的Datatrigger上的綁定問題 - WPF

示例代碼: 這裏是我試過的示例xaml。

<ListView Margin="10" Name="lvUsers"> 
    <ListView.View> 
     <GridView x:Name="gridview"> 
      <GridViewColumn Header="Type"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <ContentControl> 
          <ContentControl.Style> 
           <Style TargetType="{x:Type ContentControl}"> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding IsImage}" Value="True"> 
              <Setter Property="ContentTemplate"> 
               <Setter.Value>               
                <DataTemplate> 
                 <TextBlock Text="Text goes here" 
                Foreground="Red"/> 
                </DataTemplate> 
               </Setter.Value> 
              </Setter> 
             </DataTrigger> 

             <DataTrigger Binding="{Binding IsImage}" Value="False"> 
              <Setter Property="ContentTemplate"> 
               <Setter.Value> 
                <DataTemplate> 
                 <TextBlock Text="{Binding Itemsource}"/> 

                </DataTemplate> 
               </Setter.Value> 
              </Setter> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </ContentControl.Style> 
         </ContentControl> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 

     </GridView> 
    </ListView.View> 
</ListView> 

而且我的示例代碼xaml.cs

public partial class MainWindow : Window 
{  
    public MainWindow() 
    { 
     InitializeComponent();    
     List<myClass> mc = new List<myClass>(); 
     mc.Add(new myClass() { Itemsource = "test", IsImage = false }); 
     mc.Add(new myClass() { Itemsource = "test", IsImage = true }); 
     lvUsers.ItemsSource = mc; 
    }  
} 

class myClass 
{ 
    public string Itemsource { get; set; } 
    public bool IsImage { get; set; } 
} 

問題:DataTriggers是否按預期工作,但Triggers內的結合是給我空

<TextBlock Text="{Binding Itemsource}"/> 

我期待上面的行在相應的行中顯示test但它顯示Empty r流。

+0

「......基於viewmodel中的屬性。」您沒有視圖模型 – Tyress

+0

@Tress這只是一個簡單的示例代碼,可以更好地理解問題。實際的代碼與我擁有實際虛擬機的那個不同。 – Gopichandar

回答

1

找不到爲什麼TextBlock的DataContext爲null。它可能是由於自定義內容模板。但是,你可以通過像這樣搜索ContentControl祖先類型來解決這個問題。

<DataTrigger Binding="{Binding IsImage}" Value="False"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock Text="{Binding DataContext.Itemsource, RelativeSource={RelativeSource FindAncestor, AncestorType=ContentControl}}"/> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</DataTrigger> 

這將從父控件數據綁定中獲取數據。

編輯

這是因爲ContentControl中,你需要做的內容,如結合 - <ContentControl Content="{Binding}">。然後數據上下文將可用,並且<TextBlock Text="{Binding Itemsource}"/>將可用。

<ContentControl Content="{Binding}"> 
    <ContentControl.Style> 
     <Style TargetType="{x:Type ContentControl}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsImage}" Value="True"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value>               
          <DataTemplate> 
           <TextBlock Text="Text goes here" 
          Foreground="Red"/> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 

       <DataTrigger Binding="{Binding IsImage}" Value="False"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <TextBlock Text="{Binding Itemsource}"/> 

          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ContentControl.Style> 
</ContentControl> 
+0

作品。讓我看看在接受這個問題之前我們是否得到確切的問題。 – Gopichandar

+0

你能告訴我它應該在哪裏綁定。嘗試'ContentControl'中的'綁定'。沒有運氣 – Gopichandar

+1

如果是這樣的話,你知道ContentControl中的Datatriggers如何按預期工作嗎? – Gopichandar