2009-06-29 6 views
6

SmartFormViewユーザーコントロールのために、次のコードビハインド結合作品:このビューをこのViewModelにバインドするにはどうすればよいですか?

ビュー:

<UserControl x:Class="CodeGenerator.Views.PageItemManageSettingsView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:v="clr-namespace:CodeGenerator.Views" 
    xmlns:vm="clr-namespace:CodeGenerator.ViewModels" 
    Background="#ddd"> 

    <Grid Margin="10"> 
     <ScrollViewer DockPanel.Dock="Top"> 
      <StackPanel Margin="10"> 
       <v:SmartFormView/> 
      </StackPanel> 
     </ScrollViewer> 
    </Grid> 

</UserControl> 

コードビハインド:

using System.Windows.Controls; 
using CodeGenerator.ViewModels; 

namespace CodeGenerator.Views 
{ 
    public partial class SmartFormView : UserControl 
    { 
     public SmartFormView() 
     { 
      InitializeComponent(); 
      DataContext = new SmartFormViewModel("testing"); 
     } 
    } 
} 

しかし、私はバインドしますSmartFormViewをSmartFormViewModel に呼び出しビューのViewModelに入力します。コードビハインド。しかし、これらの2つのアプローチは結合しない:

<UserControl.Resources> 
<DataTemplate DataType="{x:Type vm:SmartFormViewModel}"> 
    <v:SmartFormView/> 
</DataTemplate> 
</UserControl.Resources> 

... 

<Grid Margin="10"> 
<ScrollViewer DockPanel.Dock="Top"> 
    <StackPanel Margin="10"> 
     <TextBlock Text="{Binding Testing}"/> 
     <v:SmartFormView DataContext="{Binding SmartFormViewModel}"/> 
     <ContentControl Content="{Binding SmartFormViewModel}"/> 
    </StackPanel> 
</ScrollViewer> 
</Grid> 

をViewModelにでテストプロパティは罰金結合するが、私はViewModelにプロパティとして定義された「テスト」と「SmartFormViewModel」を持っているし、(以下に示すように)それらの両方を満たしたが、SmartFormViewはそのSmartFormViewModelに結合しない:

private SmartFormViewModel _smartFormViewModel=; 
public SmartFormViewModel SmartFormViewModel 
{ 
    get 
    { 
     return _smartFormViewModel; 
    } 
    set 
    { 
     _smartFormViewModel = value; 
     OnPropertyChanged("SmartFormViewModel"); 
    } 
} 

private string _testing; 
public string Testing 
{ 
    get 
    { 
     return _testing; 
    }  
    set 
    { 
     _testing = value; 
     OnPropertyChanged("Testing"); 
    } 
} 

public PageItemManageSettingsViewModel(MainViewModel mainViewModel, PageItem pageItem) 
    : base(mainViewModel, pageItem) 
{ 
    SmartFormViewModel SmartFormViewModel = new SmartFormViewModel("manageSettingsMain"); 
    Testing = "test ok"; 
} 

内の特定のViewModelにXAMLでユーザーコントロールをバインドするための構文は何ですかViewのViewModelを呼び出す?

答えて

6

間違っているかもしれませんが、あなたのコードにバグがあると思います。

SmartFormViewModel SmartFormViewModel = new SmartFormViewModel("manageSettingsMain"); 

は次のようになります。

SmartFormViewModel = new SmartFormViewModel("manageSettingsMain"); 

すなわち。あなたのSmartFormViewModelは決してに設定されていません。したがって、親ビューでバインドしてもそれを見つけることはできません。

これに加えて、これを行うには良い方法は、単にビジュアルツリーにあなたの子供VMを固執することです:

<ContentControl Content="{Binding SmartFormViewModel}"/> 

とビューの解決を行うためにDataTemplateを使用するのではなく、「ハードコーディング"親ビューへのビュー。

+0

はい、それを見てくれてありがとう、ありがとう、私はまた、あなたの第二の方法を試して、それもうまく動作し、それは私にとってより意味があるので、あなたは "空の領域を定義する"ようですレンダリング時に適切なDataTemplateに自動的にバインドされるViewModelによって動的に塗りつぶされ、感謝して、うれしい、ありがとう! –

関連する問題