2017-03-29 63 views
0

當我爲應用程序創建數據類型 - 控件映射時,我發現使用ContentPresenter和Data Templates是可行的。我已經成功地做到了。對於這個片段,我包含了System.String數據類型的映射。但是,我注意到如果我綁定了一個字符串列表併爲其映射了一個泛型集合控件,那麼這些字符串將被表示爲一個TextBox,而不僅僅是普通字符串,如下圖所示(請參閱StringCollection)!WPF - 如何重新使用單數對象的數據模板進行收集?

enter image description here

現在,我想以重新使用時,動態的PropertyValue被分配一個集合的控件使用這個槓桿。我如何實現TextBox的多重綁定?如果PropertyValue是一個數組,然後綁定到它的元素;否則綁定到PropertyValue本身。

<DataTemplate> 
    <StackPanel x:Name="ItemStackPanel" Orientation="Horizontal" Margin="8"> 
     <TextBlock Text="{Binding PropertyName}" FontSize="14" MinWidth="120" 
      Validation.ErrorTemplate="{x:Null}"> 
     </TextBlock> 
     <ContentPresenter Margin="48, 0, 0, 0" Content="{Binding PropertyValue}"> 
      <ContentPresenter.Resources> 
       <DataTemplate DataType="{x:Type System:String}"> 
        <TextBox Text="{Binding ElementName=ItemStackPanel, Path=DataContext.PropertyValue}" 
         Width="100" Validation.ErrorTemplate="{StaticResource ErrorTemplate}"> 
        </TextBox> 
       </DataTemplate> 
       <DataTemplate DataType="{x:Type dataTypes:StringCollection}"> 
        <controls:GenericCollectionControl x:Name="GenericCollectionControl" 
         ItemsSource="{Binding ElementName=ItemStackPanel, Path=DataContext.PropertyValue}" 
         Validation.ErrorTemplate="{StaticResource ErrorTemplate}"> 
        </controls:GenericCollectionControl> 
       </DataTemplate> 
      </ContentPresenter.Resources> 
     </ContentPresenter> 
    </StackPanel> 
</DataTemplate> 

---修訂1 ---

我設法讓它通過利用IMultiValueConverter工作,並返回正確的綁定。

<TextBox Width="100" Validation.ErrorTemplate="{StaticResource ErrorTemplate}"> 
    <TextBox.Text> 
     <MultiBinding Converter="{StaticResource BindingSelector}"> 
      <Binding Mode="OneWay"></Binding> 
      <Binding ElementName="ItemStackPanel" Path="DataContext.PropertyValue"></Binding> 
     </MultiBinding> 
    </TextBox.Text> 
</TextBox> 

但是我有一個異常,如果綁定模式不是單向的。我該如何實現雙向綁定?

回答

0

但我有一個異常,如果綁定模式不是單向的。我該如何實現雙向綁定?

嘗試指定第一個結合的路徑:

<TextBox Width="100" Validation.ErrorTemplate="{StaticResource ErrorTemplate}"> 
    <TextBox.Text> 
     <MultiBinding Converter="{StaticResource BindingSelector}"> 
      <Binding Path="." /> 
      <Binding ElementName="ItemStackPanel" Path="DataContext.PropertyValue"></Binding> 
     </MultiBinding> 
    </TextBox.Text> 
</TextBox> 
+0

什麼路徑= 「」意思? – Xegara

+0

這意味着你綁定到DataContext本身,我相信這是你的案例中的字符串。雙向綁定需要顯式路徑。 – mm8

相關問題