2009-08-20 26 views
2

データ型を扱う際にx:typeを使用するWPFアプリケーションがあります。 これは、そのままの状態ではSilverlightでは動作しませんが、私は以前、あるSilverlight拡張機能についてどのように話しているのか、どのように使用できるのかをgooglegroupで見たことがあります。x:TypeをSilverlightに変換するWPFデータ型を変換する

私が話していることを知っている人や、Silverlightでデータパターンを再利用する方法がわかっていて、素敵なサンプルコードがあれば、私の一日を作ってくれます。

/ヨハン・

答えて

0

Silverlightで、あなたは、xオフのまま:

<Style TargetType="local:TemplatedControl"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="local:TemplatedControl"> 
        <StackPanel x:Name="Panel" /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
</Style> 
+0

私はMMVMを使用しているので、オブジェクトを動的に読み込み、タイプに応じてUIを適切な表示にします。あなたの解決策はまだ私の問題を解決しますか? –

+0

あなたのWPF xamlを取り出し、{x:Type ....}を置き換え、中括弧を削除し、x:Typeを削除してください。 Silverlightは少し違うので、テンプレートセレクタなどを作る必要があるかもしれません。 –

1

....種類と、このような中括弧を...ドロップ私は数日前に同じ問題を抱えていました...と私は解決策を発見した...私はそれを非常に誇りに思っていないですが、それは動作します。.. するDataTemplateを作成し、すべての可能なユーザーコントロールにあり

<DataTemplate x:Key="WorkspaceItemTemplate"> 
      <Grid> 
       <View:TreeView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=TreeView}" /> 
       <View:GridView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=GridView}" /> 
       <View:DataView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=DataView}" /> 
      </Grid> 
     </DataTemplate> 

を追加し、茶コンバータを作成します

<DataTemplate DataType="loc:MyType"> 
    <TextBlock Text="My template" /> 
</DataTemplate> 

Xを指定することなく、リソースディクショナリにそれを置くことができます。これは、最終的にはあなたが今、この種のものを書くことができるのSilverlight 5に固定されたタイプ

public class ViewVisibilityConverter : IValueConverter 
    { 

     #region IValueConverter Members 

     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (((ViewModelBase)value).DisplayName.Equals((string)parameter)) 
       return Visibility.Visible; 
      return Visibility.Collapsed; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 

     #endregion 
    } 
+0

ええ、これは本当に非常に良い解決策ではありませんあなたの隠されたコントロールはまだバックグラウンドでハングアップし、リソースを消費します。私はこれを行う最善の方法は、テンプレートセレクターを介していると思う。 –

1

に基づいてNGESの可視性:キー。

Silverlightはx:Type属性をサポートしていないので、マークアップ拡張なしでタイプ名を指定する必要があることに注意してください.Mayad'Dibのように記述します(彼の提案は実際には2009年にそれを書きました - SilverlightのDataTemplateには2011年12月までDataTypeプロパティがありませんでした)。

関連する問題