2017-07-07 13 views
0

私は、別々のファイルで宣言されたUserControl StepPropが2回使用されるStepsWndウィンドウを持っています。xamlマークアップファイルからUserControlコンストラクタにパラメータを渡すにはどうすればよいですか?

<Window x:Class="MyProject.StepsWnd" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:MyProject" 
    Height="550" Width="850"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <local:StepProp Grid.Column="0" DataContext="{Binding Path=PrevStepVM}" x:Name="m_PrevStep"/> 
     <local:StepProp Grid.Column="1" DataContext="{Binding Path=CurStepVM}" x:Name="m_CurStep"/> 
    </Grid> 
</Window> 

StepsWndウィンドウが作成されると、StepPropコンストラクタが2回呼び出され - m_PrevStepためとm_CurStepのために。私は、コンストラクタを呼び出している人m_PrevStepまたはm_CurStepを識別することができるように私は、StepsWndウィンドウのマークアップからStepPropクラスのコンストラクタにパラメータを渡すことができますどのように

public class StepProp : UserControl 
{ 
    public StepProp() 
    { 
     InitializeComponent(); 
    } 
    //... 
} 

?このようなことをするには?私は、コンストラクタを呼び出している人m_PrevStepまたはm_CurStepを識別することができるように私は、StepsWndウィンドウのマークアップからStepPropクラスのコンストラクタにパラメータを渡すことができますどのように

public class StepProp : UserControl 
{ 
    public StepProp(object parameter) 
    { 
     InitializeComponent(); 
     if ((string)parameter == "PrevStep") 
     { 
      //todo somthing 
     } 
     else if ((string)Param == "CurStep") 
     { 
      //todo somthing else 
     } 
    } 
    //... 
} 
+1

StepPropで依存関係プロパティを定義し、StepsWndで設定し、このプロパティ変更ハンドラでカスタマイズします。 –

+1

要素をXAMLでタグとして作成すると、パラメータのないコンストラクタのみを呼び出すことができます。 swiszczの提案は、ユーザーコントロールを「パラメータ化する」従来の方法です。 –

答えて

1

できません。 XAMLはマークアップ言語であり、引数を受け付けない既定のコンストラクタ以外のコンストラクタを使用してUserControlのインスタンスを作成することはできません。したがって、XAMLで依存関係注入を使用することについて忘れてください。

作成するインスタンスによってコンストラクタの動作が異なるようにするには、たとえば、同じベースクラスを共有したり、互いに継承したりする2つの異なるタイプを作成することを検討する必要があります。 (あなたが依存properyを定義している場合や、コールバック)

<local:StepProp x:Name="m_PrevStep" YourProperty="m_PrevStep" /> 
を...とセッターまたはプロパティに任意のロジックを処理します。また

あなたが定義し、コメントで示唆されているようにプロパティを設定することができます。

プロパティ値はコンストラクタで使用できませんが、XAMLプロセッサが実際にプロパティを設定する前にインスタンスを作成する必要があることに注意してください。

関連する問題