9


1

デフォルトの 'ToString()'データテンプレートの代わりに、デフォルトの空のデータテンプレートを指定します。

wpfアプリケーションのデフォルトのDataTemplateは `.ToString()`メソッドの結果を表示します。 デフォルトのDataTemplateに何も表示されないようなアプリケーションを開発しています。

私はもう試した:


しかしこれはうまくいきません。 アプリケーション内のすべてのクラスタイプに特定のDataTemplateを指定せずにこれが可能かどうかを誰かが知っていますか?

6 Answer


4


私はこれをする方法がないのを知っています。 以下のJoeのコメントによると、WPFは特に Object`型に DataTemplate`を指定することを許可していません。

あなたの正確な要求によっては、特定のタイプにマッチする `DataTemplate`を探すほうが簡単かもしれません。 見つかった場合はそれを使用してください。 そうでなければ、何も表示しません。 例えば:


そしてあなたのセレクタ(疑似コード、明らかに):

var dataTemplateKey = new DataTemplateKey() { DataType = theType; };
var dataTemplate = yourControl.FindResource(dataTemplateKey);

if (dataTemplate != null)
{
    return dataTemplate;
}

return NulloDataTemplate;


4


MVVMパターンを使用していて、すべてのViewModelクラスが派生する抽象クラスがある場合は、System.Objectの代わりにそのクラスを使用できます。



3


私はNullableを使いました、私の状況のた​​めに働きました。



1


デフォルトのDataTemplateを置き換えることについてはよくわかりませんが、ValueConverterを使用して、特定の型の場合には表示ToStringを渡し、それ以外の場合は空の文字列を渡すことができます。 ここにいくつかのコードがあります(typeb textblockはそれが通常のように見えるかを示すためにそれの上にコンバータを持っていないことに注意してください):

xaml:

xaml.cs:
namespace EmptyTemplate {/// /// Window1.xamlの対話ロジック///パブリック部分クラスWindow1:Window {public Window1(){InitializeComponent();} }}

パブリッククラスAType {}

パブリッククラスBType {}

パブリッククラスTypeConverter:IValueConverter {public DataTemplate DefaultTemplate {get;}セット; }

#region IValueConverterメンバー

パブリックオブジェクトConvert(オブジェクト値、タイプtargetType、オブジェクトパラメータ、System.Globalization.CultureInfoカルチャ){if(value.GetType()== typeof(AType)){return value.ToString(); DefaultTemplateを返します。 }

パブリックオブジェクトConvertBack(オブジェクト値、タイプtargetType、オブジェクトパラメータ、System.Globalization.CultureInfoカルチャ){新しいNotImplementedException()をスローします。 }

#endregion}}


0


ここでセレクタを使ってこれを行う方法についての実用的な例(最善の方法IMO):

パブリッククラスEmptyDefaultDataTemplateSelector:DataTemplateSelector {パブリックオーバーライドDataTemplate SelectTemplate(オブジェクト項目、DependencyObjectコンテナ){if(item!= null){var dataTemplateKey = new DataTemplateKey(item.GetType()); var dataTemplate =((FrameworkElement)container).TryFindResource(dataTemplateKey); if(dataTemplate!= null)return(DataTemplate)dataTemplate。 }

新しいDataTemplate()を返します。 // nullは機能しません}}


0


誤って何かを発見しました。 私はカスタム依存関係プロパティを使用して、タイプ(私の場合はエンティティ)に基づいたデータテンプレートを持つコンテンツコントロールを持つユーザーコントロールにDatacontextを設定していました。 私はいくつかの異なる種類のエンティティを持っていたので、私のカスタム依存プロパティは

`typeof(オブジェクト)

これは私がContentControlのdatacontextにバインドするのに使っていたデバイスでした。

パブリックオブジェクトMySelectedItem {get {return(object)GetValue(Property1Property);} set {SetValue(Property1Property、value);} }}

public static readonly DependencyProperty Property1Property = DependencyProperty.Register( "MySelectedItem"、typeof(オブジェクト)、typeof(PromotionsMenu)、new PropertyMetadata(false));

こんな感じで使われる:

MySelectedItem = SomeEntity;

私もこのように使うことができることを発見しました:

MySelectedItem = "テキスト";

そしてcontextcontrolはその文脈としてテキストを表示します。

MySelectedItem = "";

完全に空白のコンテキストで動作します。

`