2016-12-19 9 views
0

WPFには、ボタン、テキストボックス、およびリストビューを含む単純なusercontrolがあります。詳しくはListControllerのDataTemplateをUserControlに追加する

<Window x:Class="Example.TestWindow" 
     ...> 

    <Grid> 
     <local:SearchListControl DataContext="{Binding GenericSearchListViewModel}" /> 
    </Grid> 
</Window> 

public class SearchListViewModel<T> : ViewModelBase 
{ 
    private ObservableCollection<T> _items; 

    public ObservableCollection<T> Items 
    { 
     get 
     { 
      return _items; 
     } 
     set 
     { 
      _items = value; 
      OnPropertyChanged(); 
     } 
    } 

    private T _current; 

    public T Current 
    { 
     get 
     { 
      return _current; 
     } 
     set 
     { 
      _current = value; 
      OnPropertyChanged(); 
     } 
    } 

    ... 
} 

私はそのような別のウィンドウでそのコントロールを置く:

<UserControl x:Class="Example.SearchListControl" 
     ... 
     mc:Ignorable="d"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 

     <TextBox Grid.Row="0" Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}" /> 
     <ListView Grid.Row="1" ItemsSource="{Binding Items}" SelectedItem="{Binding Current}" /> 
     <Button Grid.Row="2" Command="{Binding SomeSortOfCommand}"> 
    </Grid> 
</UserControl> 

ViewModelにそのユーザーコントロールのために次のようになります。私は、コントロールは少しことを簡素化柔軟性、私はウィンドウからそのコントロール内のListViewのためのdatatemplateを設定したいですか?次のようなものがあります。

<Window ...> 

    <Window.Resources> 
     <DataTemplate x:Key="ListViewTemplate"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="100" /> 
        <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="{Binding Path=ShortCaption}" /> 
       <TextBlock Grid.Column="1" Text="{Binding Path=Caption}" /> 
      </Grid> 
     </DataTemplate> 

    </Window.Resources> 
    <Grid> 
     <local:SearchListControl DataContext="{Binding GenericSearchListViewModel}" 
       DataTemplate="{StaticResource ListViewTemplate}" /> 
    </Grid> 
</Window> 

これは可能でしょうか、まったく間違っていますか?

答えて

0

あなたSearchListUserControl.xamlでのListViewを与える場合はファイル名:

<ListView x:Name="lv" ... /> 

を...あなたは簡単にSearchListControlクラスのプロパティを介してそのItemTemplateにプロパティを公開することができます:

public abstract class SearchListControl : UserControl 
{ 
    public SearchListControl() 
    { 
     InitializeComponent(); 
    } 

    public DataTemplate DataTemplate 
    { 
     get { return lv.ItemTemplate; } 
     set { lv.ItemTemplate = value; } 
    } 
} 

...ウィンドウから設定してください:

<local:SearchListControl DataContext="{Binding GenericSearchListViewModel}" 
      DataTemplate="{StaticResource ListViewTemplate}"/
関連する問題