2

さまざまなページに対して複数のコントロールを持つ Wpf ブラウザー アプリケーションを作成しています。すべてのページは、次のような同じパターンに従います。

すべてのページ読み込みイベントで、ユーザーに表示される 2 つのコンボ ボックスがあります。ユーザーが の任意の値を選択すると、comboboxのようなすべてのコントロールがユーザーに表示されます。buttonlabeltextbox

アプリケーション全体で使用できるように、コントロールを非表示にする共通のクラス/関数を作成したいと考えています。それを行う方法はありますか?

4

2 に答える 2

5

解決策 1:

すべてのページで、次のようにコントロールを非表示/表示するトリガーを追加できます-

<ComboBox Height="22" Name="comboBox1" /> 
<Grid>
   <Grid.Style>
        <Style TargetType="{x:Type Grid}"> 
            <Setter Property="Visibility" Value="Visible"></Setter> 
            <Style.Triggers> 
                <DataTrigger 
                    Binding="{Binding ElementName=comboBox1, Path=SelectedItem}" 
                    Value="{x:Null}"> 
                    <Setter Property="Visibility" Value="Collapsed"></Setter> 
                 </DataTrigger> 
            </Style.Triggers> 
        </Style>
   <Grid.Style>

  <!-- Your controls; TextBox, Buttons etc. -->

</Grid> 

解決策 2:

より複雑なロジックが必要な場合 (2 つのコンボボックスに基づくなど) を作成しMultiValueConverter、上記の XAML でそれを使用してVisibilityGrid.

これを複数のウィンドウで再利用する場合は、スタイルを作成してすべてのウィンドウのグリッドに適用できます。

解決策 3:

倫理論理が提案するように、共通のViewModelを作成します。

ViewModel アプローチを使用する場合、プロパティを持つ必要はありません。トリガーまたはコンバーターでプロパティをVisibility使用するだけです。SelectedItem別のプロパティを作成したい場合でも、Boolean型を作成して XAML で使用することをお勧めします。

3 つのケースすべてで共通のスタイルを作成し、それをすべてのウィンドウで再利用できます。

于 2012-07-18T09:19:43.127 に答える
2

ViewModelBaseクラスで、ComboBoxがバインドされているリストのプロパティと同じタイプのプロパティ(SelectedItemなど)を作成します。そして、このプロパティをComboBoxの選択されたアイテムにバインドします。タイプVisibilityの別のプロパティ(たとえばControlVisibilty)を作成し、それをすべてのコントロール(ComboBoxで選択したアイテムに基づいて可視性を変更する)Visiblityプロパティにバインドします。次に、SelectedItemプロパティのSetterで、ロジックに従ってControlVisibiltyの値を設定します。別のコンボボックスでも同じことができます。これがアイデアの取得に役立つことを願っています。

于 2012-07-18T02:22:32.390 に答える