2010-06-19 54 views
0

我有兩個數據模板(一個用於繪製[繪製],另一個用於輸入數據[數據])另外我有兩個使用上述DataTemplates的ContentControls。 我希望這兩個DataTemplate的元素都是綁定的,這樣當用戶填充數據表單中的一個字段DateTemplate時,它也會自動更新繪製模板。DataTemplate中的綁定項目與來自另一個DataTemplate的項目

如何將繪製DataTemplate中的元素與數據DataTemplate的元素綁定。 根本沒有後端數據。用戶從組合框中選取一個值,並根據組合框中選定的值,使用相關繪圖和數據DataTemplates更新兩個ContentControl。用戶填寫數據表單中的相關字段並繪製模板根據一些業務規則繪製這些元素。

-----

<DataTemplate x:Key="data"> 
     <Grid Grid.Row="0" Background="#FFFFFFFF" Name="DocumentRoot" VerticalAlignment="Top"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="auto" /> 
       <RowDefinition Height="auto"/> 
       <RowDefinition Height="auto"/> 
      </Grid.RowDefinitions> 
      <Grid Margin="10" VerticalAlignment="Top"> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition /> 
        <RowDefinition /> 
        <RowDefinition /> 
        <RowDefinition /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="100" /> 
        <ColumnDefinition Width="200" /> 
       </Grid.ColumnDefinitions> 

       <TextBlock Text="Heading Text" Grid.Row="1"/> 
       <TextBlock Text="Ticket Text" Grid.Row="2"/> 
       ----- 
       <TextBox x:Name="txtHeading" Text="Heading Text" Grid.Row="1" Grid.Column="1"/> 
       <TextBox x:Name="txtTicketText" Text="Ticket Text" Grid.Row="2" Grid.Column="1"/> 
       ----- 
      </Grid> 


     </Grid> 
    </DataTemplate> 

<ContentControl Content="{Binding ElementName=cboTemplates, Path=SelectedItem.Name}" 
         ContentTemplateSelector="{StaticResource formTemplateSelector}"> 
       </ContentControl> 

任何想法如何從不同的DataTemplates中綁定這兩個元素?

在此先感謝

回答

0

你爲什麼不綁定一個對象(類具有Draw屬性和Data財產)這兩個模板。當一個模板更改對象中的Data屬性時,可以刷新對象中的Draw屬性,從而更新Draw模板。


更新


實施例:

窗口內容

<Grid> 
    <StackPanel> 
     <ContentControl DataContext="{Binding}"> 
      <ContentControl.Template> 
       <ControlTemplate> 
        <Rectangle Fill="{Binding Background}" 
           Width="200" 
           Height="200" /> 
       </ControlTemplate> 
      </ContentControl.Template> 
     </ContentControl> 
     <ContentControl DataContext="{Binding}"> 
      <ContentControl.Template> 
       <ControlTemplate> 
        <TextBox Text="{Binding ColorText}" /> 
       </ControlTemplate> 
      </ContentControl.Template> 
     </ContentControl> 
    </StackPanel> 
</Grid> 

代碼後面

public partial class MultiViewWindow : Window 
{ 
    public MultiViewWindow() 
    { 
     InitializeComponent(); 

     DataContext = new BackgroundInfo(); 
    } 
} 

public class BackgroundInfo : INotifyPropertyChanged 
{ 
    protected String _colorText; 
    public String ColorText 
    { 
     get 
     { 
      return _colorText; 
     } 
     set 
     { 
      _colorText = value; 
      RaisePropertyChanged("ColorText"); 
      RaisePropertyChanged("Background"); 
     } 
    } 

    public Brush Background 
    { 
     get 
     { 
      try 
      { 
       return new SolidColorBrush((Color)ColorConverter.ConvertFromString(ColorText)); 
      } 
      catch (Exception) 
      { 
       return new SolidColorBrush(Colors.Transparent); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    void RaisePropertyChanged(String propertyName) 
    { 
     PropertyChangedEventHandler temp = PropertyChanged; 
     if (temp != null) 
     { 
      temp(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

你能給我一些示例代碼嗎? – Jhelumi786 2010-06-19 20:16:27

+0

我沒有嘗試上面的代碼,它沒有工作。 我認爲它是因爲DataContext作爲ContentContorl的綁定與comboxBox。 – Jhelumi786 2010-06-20 10:59:41

+0

什麼comboBox?你的意思是什麼都行不通?它有拋出一個綁定錯誤嗎? – decyclone 2010-06-20 11:24:30

0

考慮創建類(名爲View Model)並將兩個模板綁定到該類的單個實例(這是Model-View-ViewModel設計模式)。否則,你可能會有非常複雜的綁定包含硬編碼的邏輯樹。

+0

如果可能,請提供任何代碼示例? – Jhelumi786 2010-06-19 20:14:59

相關問題