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"
に設定し、適切な値を返します。
私はContentControl
のEditor
Content
を作り、その後、DataTemplatesで遊んで純粋なXAMLでこれを実行しようとしましたが、私はEditor
の親を変更するために、例外を取得せずにその作業を行うための方法を見つけることができませんでした。
「ContentControl」でニースのトリック! – Sam
@Samもしそれがうまくいけば!私の更新を参照してください。 –
うん、それは真実であるにはあまりにも冷たかった... – Sam