2012-03-10 75 views
0

我有一個文本框和一個按鈕,該按鈕的ControlTemplate打開一個子窗體可選擇的東西,並顯示在文本框中選擇的項目,如:如何創建ControlTemplate的兩個獨立實例在窗口中?

<Window.Resources> 
    <ControlTemplate x:Key="CreateParam"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="1*"/> 
       <ColumnDefinition Width="1*"/> 
       <ColumnDefinition Width="3*"/> 
      </Grid.ColumnDefinitions> 
      <Button Content="select" Command="{Binding ShowSpecItemViewommand}" Grid.Column="0" Margin="2"/> 
      <TextBox Margin="2" Text="{Binding Param}" Grid.Row="0" Grid.Column="1"/> 
      <TextBlock Margin="5" Text="patameter" Grid.Row="0" Grid.Column="2"/> 
     </Grid> 
    </ControlTemplate> 
    </Window.Resources> 

和我有這樣的視圖模型屬性:

public string param; 
    public string Param 
    { 
     get 
     { 
      return param; 
     } 
     set 
     { 
      param = value; 
      RaisePropertyChanged("Param"); 
     } 
    } 

,現在我想在一個窗口中創建一個控制的兩個獨立的實例,但是當我選擇的第一個實例的值,他們都已經changed.should我定義了兩個性能又如何呢?我可以將它們綁定到控件模板嗎? 我不確定每個人都能理解我的意思,所以我希望有人編輯我的問題:)

回答

0

如何使用控制模板?你將哪個控件附加到這個模板?它是您擁有的自定義控件的模板嗎?它是一個已知控件的模板嗎?

如何實例化控件模板的DataContext?儘管你可以使用ControlTemplate(和一個自定義控件)來實現你想要的東西,並且如果你的對象有很多(即多於兩個和所有的)實例,ControlTemplate可能是正確的範例,使用DataTemplate或UserControl會更好。有多種方法可以實現您想要的功能,但下面的代碼被認爲是「規範」解決方案:

說Param是MyVM對象的屬性。那麼你的XAML文件應該是:

<Window 
    x:Class="SO.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:so="clr-namespace:SO" 
    Height="200" Width="350" 
    Title="SO Sample" 
    > 
    <Window.Resources> 
     <DataTemplate DataType="{x:Type so:MyVM}"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="1*"/> 
        <ColumnDefinition Width="1*"/> 
        <ColumnDefinition Width="3*"/> 
       </Grid.ColumnDefinitions> 
       <Button Content="select" Command="{Binding ShowSpecItemViewommand}" Grid.Column="0" Margin="2"/> 
       <TextBox Margin="2" Text="{Binding Param}" Grid.Row="0" Grid.Column="1"/> 
       <TextBlock Margin="5" Text="patameter" Grid.Row="0" Grid.Column="2"/> 
      </Grid> 
     </DataTemplate> 
    </Window.Resources> 

    <StackPanel> 
     <ContentControl> 
      <so:MyVM Param="1234" /> 
     </ContentControl> 
     <ContentControl> 
      <so:MyVM Param="5678" /> 
     </ContentControl>   
    </StackPanel> 

</Window> 
相關問題