2016-08-26 3 views
2

に応じて結合キャンセル。テキストボックスにはTextプロパティがありますが、チェックボックスにはありません。
ラベルは、「チェックボックスエディタ」にバインドされている場合、それは、Visual Studioでの警告を生成します。は、私はテキストプロパティの長さにバインドされているラベルを持っている私のWPFアプリケーションでオブジェクト型

BindingExpression path error: 'Text' property not found on 'object'...

これが期待されていると私はないにバインディングエンジンを伝えるためにどのような方法があるかどうかを知りたいですEditorオブジェクトがテキストボックスでない限り、この値をバインドしようとしますか?

答えて

2

viewmodelのEditorプロパティはコントロールですか?とにかく、私は望んでいない。

値の型を返すvalueconverterを作成し、Styleの一連のトリガを使用してラベルの内容を設定できます。エディタのタイプが{x:Type TextBox}の場合は、上記のバインディングに設定します。 {x:Type CheckBox}の場合は、 `{Binding Editor.IsChecked} 'にしてください。

XAML

<Label> 
    <Label.Style> 
     <Style TargetType="Label" BasedOn="{StaticResource {x:Type Label}}"> 
      <Style.Triggers> 
       <DataTrigger 
        Binding="{Binding ElementName=Editor, Converter={local:GetTypeConverter}}" 
        Value="{x:Type TextBox}" 
        > 
        <Setter 
         Property="Content" 
         Value="{Binding Text.Length, ElementName=Editor}" 
         /> 
       </DataTrigger> 
       <DataTrigger 
        Binding="{Binding ElementName=Editor, Converter={local:GetTypeConverter}}" 
        Value="{x:Type CheckBox}" 
        > 
        <Setter 
         Property="Content" 
         Value="{Binding IsChecked, ElementName=Editor}" 
         /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Label.Style> 
</Label> 

C#

public class GetTypeConverter : MarkupExtension, IValueConverter 
{ 
    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return this; 
    } 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value?.GetType(); 
    } 

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

また、あなたのviewmodelはのviewmodelはEditorを持っており、それが何であるかを知っているので、そのラベルであるべきものを返す読み取り専用プロパティを持つことができます。当面はEditorLabelValueとしてください。おそらくEditorは、どのエディタであるかによって、stringプロパティまたはboolプロパティにバインドされていると考えられます。したがって、これらの設定者の両方は、を"EditorLabelValue"に設定し、適切な値を返します。

私はContentControlEditorContentを作り、その後、DataTemplatesで遊んで純粋なXAMLでこれを実行しようとしましたが、私はEditorの親を変更するために、例外を取得せずにその作業を行うための方法を見つけることができませんでした。

+0

「ContentControl」でニースのトリック! – Sam

+0

@Samもしそれがうまくいけば!私の更新を参照してください。 –

+0

うん、それは真実であるにはあまりにも冷たかった... – Sam

関連する問題