1

次のサブクラスがありTabItem、プロパティを設定しようとしていHeaderます。私はこれをMultiBinding:で試しました

<DataEditPane x:TypeArguments="MyType" x:Class="MyDataEditPane">
    <DataEditPane.Header>
        <MultiBinding StringFormat="Hello world {0} {1}">
            <Binding Path="BoundVariable1" />
            <Binding Path="BoundVariable2" />
        </MultiBinding>    
    </DataEditPane.Header>
</DataEditPane>

しかし、それ自体は失敗します。

System.Windows.Data Error: 28 : MultiBinding failed because it has no valid Converter. MultiBindingExpression:target element is 'MyDataEditPane' (Name=''); target property is 'Header' (type 'Object')
System.Windows.Data Error: 28 : MultiBinding failed because it has no valid Converter. MultiBindingExpression:target element is 'MyDataEditPane' (Name=''); target property is 'Header' (type 'Object')

私はいつもStringFormatコンバーターの役割を果たしていると思っていましたが、おそらくそうではありませんか?

のようなある種のコンテナでフィールドを一緒にラップすることLabelも機能しないようです。

<DataEditPane x:TypeArguments="MyType" x:Class="MyDataEditPane">
    <DataEditPane.Header>
        <Label>
            <Label.Text>
                <MultiBinding StringFormat="Hello world {0} {1}">
                    <Binding Path="BoundVariable1" />
                    <Binding Path="BoundVariable2" />
                </MultiBinding>    
            </Label.Text>
        </Label>
    </DataEditPane.Header>
</DataEditPane>

この場合、.ToString()ラベル( " System.Windows.Controls.Label")の表現がヘッダーとして表示されます。

単一のバインディングが問題なく機能することに注意してください。

<DataEditPane x:TypeArguments="MyType" x:Class="MyDataEditPane">
    <DataEditPane.Header>
        <Binding Path="BoundVariable1" />
    </DataEditPane.Header>
</DataEditPane>

重要な場合は、継承階層のスーパークラスの1つとしてSyncfusionを使用してTabItemExtいますが、そのクラスはHeaderプロパティをオーバーライドしないため、違いはないと思います。

私は何が間違っているのですか?ViewModelで別のプロパティを作成してヘッダーとして機能させる(そしてそれをシングルバインドする)ことができることは知っていますが、XAMLでこれを適切に行う方法を学びたいと思います。

4

2 に答える 2

4

Labelの代わりにTextBlockを試してください。次のコードは私にとってはうまくいきました。

私はこれを試しました:

<Window x:Class="ListBox.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:ListBox" Title="Window1" Height="300" Width="300">
    <Window.DataContext>
        <local:TextVM/>
    </Window.DataContext>
    <StackPanel>
        <TextBox Text="{Binding Text1}"  />
        <TextBox Text="{Binding Text2}" />
        <TextBlock>
            <TextBlock.Text>
                <MultiBinding StringFormat="Hello World {0} - {1}">
                    <Binding Path="Text1" />
                    <Binding Path="Text2" />
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </StackPanel>
</Window>

StringFormatは、オブジェクトではなく文字列が期待される場合にのみ有効かどうか疑問に思います。

ここにMSDNの例があります:http://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.stringformat.aspx

于 2012-11-06T18:06:07.317 に答える
2

マルチバインディングにはコンバーターが必要です。使用できるコンバーターはであると思いますStringFormatConverter。これはマルチバインディングIMultiValueConverterで機能します。多分あなたはそれをあなたのケースに適応させるべきです。

これがあなたに役立つことを願っています...

于 2012-11-06T18:48:24.640 に答える