23

このマルチバインディングを取る方法はありますか?

<TextBox.IsEnabled>
    <MultiBinding Converter="{StaticResource LogicConverter}">
        <Binding ElementName="prog0_used" Path="IsEnabled" />
        <Binding ElementName="prog0_used" Path="IsChecked" />
    </MultiBinding>
</TextBox.IsEnabled>

そして、putは、<TextBox IsEnabled="" />?のようにすべて1行になります。

もしそうなら、どこでこのフォーマットのルールを学ぶことができますか?

4

4 に答える 4

21

より良い(そしてより単純な)アプローチは、任意のTextBoxに簡単に適用できるリソースとしてスタイルを定義することです。

<Window.Resources>
    <c:MyLogicConverter x:Key="LogicConverter" />

    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}" x:Key="MultiBound">
        <Setter Property="IsEnabled">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource LogicConverter}">
                    <Binding ElementName="switch" Path="IsEnabled" />
                    <Binding ElementName="switch" Path="IsChecked" />
                </MultiBinding>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<StackPanel Orientation="Horizontal">
    <CheckBox Name="switch" />
    <TextBox Name="textBox2" Text="Test" Style="{StaticResource MultiBound}" />
</StackPanel>
于 2010-06-02T21:25:53.727 に答える
6

これは、カスタムマークアップ拡張機能を使用して実行できます。

public class MultiBinding : System.Windows.Data.MultiBinding
{
    public MultiBinding (BindingBase b1, BindingBase b2)
    {
        Bindings.Add(b1);
        Bindings.Add(b2);
    }

    public MultiBinding (BindingBase b1, BindingBase b2, BindingBase b3)
    {
        Bindings.Add(b1);
        Bindings.Add(b2);
        Bindings.Add(b3);
    }

    // Add more constructors if you need.
}

使用法:

<TextBox IsEnabled="{local:MultiBinding
    {Binding IsEnabled, ElementName=prog0_used},
    {Binding IsChecked, ElementName=prog0_used},
    Converter={StaticResource LogicConverter}}">
于 2014-06-11T00:18:05.907 に答える
4

MultiBindingの場合、省略形の文字列はありません。拡張要素構文を使用する必要があります。

于 2010-06-03T02:33:34.097 に答える
3

Discordの答えを使ってみましたが、箱から出してすぐには機能しませんでした。それを機能させるために、新しいコンストラクターを追加しました。

public class MultiBinding : System.Windows.Data.MultiBinding
{
    public MultiBinding(BindingBase b1, BindingBase b2, object converter)
    {
        Bindings.Add(b1);
        Bindings.Add(b2);
        Converter = converter as IMultiValueConverter;
    }
}

使用法は次のようになります。

    <TextBox IsEnabled="{local:MultiBinding {Binding IsEnabled, ElementName=prog0_used}, 
{Binding IsChecked, ElementName=prog0_used}, 
{StaticResource LogicConverter}}">
于 2015-06-23T05:30:26.010 に答える