2016-09-27 14 views
-1

私はタイプを選択できるコンボボックスを持っています。タイプを選択すると、componentを記入することができます。でも、私のコンポーネントはcorresponding to my typeです。だから、もし日付であれば、私はdatepickerを表示したい、そしてそれが文字列ならば、textboxを表示したいと思う。コンポーネントを変更するXAMLの条件

どうすればいいですか?

この行がデータグリッド:)の一部であるため、私は、DataTemplateの周りのものを変更したくない

<DataGridTemplateColumn Header="SQLValue" Width="0.55*" CanUserResize="False" CanUserReorder="False"> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
        <!-- HERE ! HOW CAN I CHOOSE ONE BY A CONDITION ? --> 
        <DatePicker/> 
        <TextBox Text="{Binding SqlValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 
+0

テンプレートの仕事のように聞こえます。すなわち、それぞれのタイプに対して異なる 'DataTemplate'を作成してから、セルを自動的に正しいテンプレートを選択させます(または、必要があればセルテンプレートを単一の' ContentControl'右テンプレートを選択します)。何を試しましたか? _あなたは何を問題にしていますか?これらの質問に対する答えを明確に示す良い[mcve]を提供してください。 –

答えて

1

ここでの考え方は以下のとおりです。あなたのすべきデータコンテキストコールDispTypeでプロパティ(int型) 次に、各コントロールで、上記のプロパティで可視性をバインドし、Converter convert numberをVisibleに含めるかどうかを指定します。Converter hasパラメータはnumberです。

あなたは私の例を見ることができます:

<Grid> 
    <Button Visibility="{Binding DispType, Converter={StaticResource VisibilityTypeConverter}, ConverterParameter=1}"/> 
    <TextBox Visibility="{Binding DispType, Converter={StaticResource VisibilityTypeConverter}, ConverterParameter=2}"/> 
    <DatePickerTextBox Visibility="{Binding DispType, Converter={StaticResource VisibilityTypeConverter}, ConverterParameter=3}"/> 
</Grid> 

あなたはConverterParameterのためのハードコードを参照してください。 およびコンバータクラス

public class VisibilityTypeConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     int actualType = parameter == null ? 0 : System.Convert.ToInt32(parameter); 
     int compareType = value == null ? 0 : System.Convert.ToInt32(value); 

     if (actualType == compareType) 
     { 
      return Visibility.Visible; 
     } 
     return Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
  • そのコードが唯一のデモで、あなたはあなたの期待を満たすために、コードを変更する必要がありませんしてください。
+0

これは完璧な男です!現在、それを行うには本当にスマートな方法です、ありがとう! – Destunk

関連する問題