4

MVVM Light を使用して WPF アプリケーションを取得しました。1 つのビューで、同じ可視性バインディングを使用している多くのコントロールを取得しました。すべてのコントロールに長いバインディング パスを挿入したくないからです。リソースを使用したいのですが...

<SomeControl>
  <SomeControl.Resource>
    <Visibility x:Key="myVisibilityResource" >
        <Binding Path="somePath" Converter="BoolToVisibilityConverter"></Binding>
    </Visibility>
  </SomeControl.Resource>
<SomeControl>

このバージョンでは、Visibility が直接コンテンツをサポートしていないというエラーが表示されます。次のように書く必要があります。

<Visibility x:Key="myVisibilityResource" >
    Collapsed
</Visibility>

何か案は?

4

3 に答える 3

1

このようなものはどうですか?それはまさにあなたが求めたものではありませんが、毎回コンバーターを含める必要がないため、コピーするコードが少なくなります。

<UserControl>
  <Grid>
    <SomeElement x:Name="Master" Visibility="{Binding somePath, Converter={StaticResource BoolToVisibilityConverter}}" />
    <SomeOtherElement Visibility="{Binding Visibility, ElementName=Master}" />
    <SomeOtherElement Visibility="{Binding Visibility, ElementName=Master}" />
  </Grid>
</UserControl>
于 2013-04-23T14:11:17.870 に答える
1

XAML に "Visible" または "Collapsed" を書き込むことができるようにすることだけが必要な場合 (最後の例のように)、 にバインドし、指定されたテキスト ("Visible" にすることができます) を解析するためにObjectDataProvider使用します。 Enum.Parse、「折りたたみ」、または「非表示」):

<Grid xmlns:sys="clr-namespace:System;assembly=mscorlib" >
    <Grid.Resources>
        <ObjectDataProvider x:Key="visibilityProvider"
                MethodName="Parse" 
                ObjectType="{x:Type sys:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="Visibility" />
                <sys:String>Visible</sys:String>
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Grid.Resources>

    <Button x:Name="button1" Visibility="{Binding Source={StaticResource visibilityProvider}}" />

</Grid>

上記のコードでは、 を使用して列挙ObjectDataProviderを返しています。バインド時VisibilityObjectDataProvider呼び出し。Enum.ParseボタンのVisibilityプロパティは にバインドされますObjectDataProvider。プロパティは、のMethodParametersパラメータを指定しますEnum.Parse

MethodParameters残念ながら、基になる ViewModel に直接バインドする方法はありません。これを行いたい場合は、独自に作成するか、正しい値を返すObjectDataProvider代わりに独自のクラス/メソッドを使用できると思います。Enum.ParseVisibility

于 2013-04-23T12:27:12.403 に答える
1

リソースでスタイルを作成します。

<Style TargetType="Control" x:Key="VisibilityStyle">
            <Setter Property="Visibility" 
 Value="{Binding Converter={StaticResource VisibleIfFalse}}"/>
</Style>

次に、非表示/表示するアイテムへの参照を追加するだけです。

<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>

これは、グリッドのヘッダーにも機能します...

于 2015-04-13T16:08:35.270 に答える