2016-08-11 20 views
0

MVVMモデルを使用してプロジェクトを作成し、ビューファーストの手法でプロジェクトを作成しました。MVVMのビューを制御する

私はTextBoxからデータを渡すためにButtonと一緒に、私のXAMLコードでTextBoxを持っている:私はボタンをクリックすると

<!-- View - XAML code --> 
<TextBox 
    MinWidth="30" 
    Name="TagId"/> 

<Button 
    Command="{Binding AddTagCommand}" 
    CommandParameter="{Binding Text, ElementName=TagId}" 
    Content="Add"/> 

、私はTextBoxはクリアしたいです。 Prism manualによれば、いくつかの場合において

、ビハインドコードは、そのような複雑なアニメーションのように、拡張可能アプリケーションマークアップ言語(XAML)で表現することが困難又は非効率的である視覚的な動作を実装するUIロジックコードを含んでいてもよいですまたはビューの一部であるビジュアル要素をコードが直接操作する必要がある場合です。

ここではコードの背後にあり、viewmodelです。

//View - code behind 
public partial class ApplicationStarterView : UserControl 
{ 
    public ApplicationStarterView() 
    { 
    } 

    public ApplicationStarterView(ApplicationStarterViewModel viewModel) : this() 
    { 
     DataContext = viewModel; 
     InitializeComponent(); 
    } 
} 

//View model 
public class ApplicationStarterViewModel : BindableBase 
{ 
    private readonly IUnityContainer _container; 

    public ApplicationStarterViewModel(IUnityContainer container) 
    { 
     _container = container; 
     AddTagCommand = new DelegateCommand<object>(AddTag); 
    } 

    public ICommand AddTagCommand { get; private set; } 

    private void AddTag(object input) 
    { 
     //Forward stuff 
     //Clear TextBox 
    } 
} 

は、私はいくつかのコードではどのような方法のスクイズでTagId.Clear()を行うことができますか?

答えて

4

私はビューモデルの別のプロパティにテキストをバインドします。

AddTagCommandはコマンドパラメータをスキップして新しいTextプロパティを直接読み込み、追加してクリアしてTagIdを更新することができます。

完全に無関係のアドバイス:材料を作成する必要がある場合は、工場を使用してIUnityContainerを注入することはほとんどお勧めできません。

+0

「テキスト」のプロパティは、行く方法のように聞こえます。それでは、UnityContainerとは何をしていますか?私は何とかそれにアクセスできるようにする必要があります... –

+0

何のためにそれが必要ですか? 'Container.Resolve ()'を実行する必要がある場合は、 'CreateTag'メソッドを持つ' IMyTagFactory'を注入してください。 – Haukinger

+0

これはあなたが参照している正しいパターンです:http://www.dofactory.com/net/factory-method-design-pattern。私は、モデル内のすべての異なる次元を得るためにコンテナが必要です。私は最初にビューを行うので、ビューはビュー・モデルを作成し、モデルを作成します。これは私のためのものです。私はコンテナをどのように使用すべきか誤解しているかもしれません... –

関連する問題