2017-07-14 5 views
-1

でそれを使用する:あなたが見ることができるようにユーザーコントロール - 私はカスタムコントロールを持つカスタム列挙型を宣言して、VMの

<UserControl> 
<Grid x:Name="Layout"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
    <Label Grid.Column="0" Content="{Binding ProtocolType, TargetNullValue='https://'}" /> 
    <TextBox Grid.Column="1" 
      VerticalContentAlignment="Center" MinWidth="200" Text="{Binding Hostname, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" /> 
    <Label Grid.Column="2" Content="{Binding PathType}" /> 
    <ProgressBar Grid.Column="3" IsIndeterminate="True" Width="40" Height="10" 
       HorizontalContentAlignment="Center" /> 
    <Image Grid.Column="3" Width="16" Height="16" /> 
</Grid> 

、それはプログレスバーとイメージを持っています。プログレスバーは、何かがやっているときに表示され、画像は結果を示します(ok/bad)。私が欲しいのは、MainViewのボタンを押すとプログレスバーが表示され、操作が完了すると結果が画像として表示され、プログレスバーが非表示になります。 私の計画は、4つの州でenumを宣言することでした - 何も進まず、ok、悪いです。しかし、私は列挙型を宣言し、ユーザーコントロールのいくつかのコントロールを操作するために使用するかどうかはわかりません。ViewModelでこの列挙型を使用できるかどうかです。私がMVVMに違反しないならば。

EDIT: 列挙:

public enum Progress 
    { 
     InProgress, 
     Success, 
     Failed, 
     Nothing 
    } 

VM:

private Progress _webServiceProgress; 

    public Progress WebServiceProgress 
    { 
     get { return _webServiceProgress; } 
     set { Set(ref _webServiceProgress, value); } 
    } 

このVMのプロパティ/私は私のUserControlプロパティ(DP)に結合すると、列挙型の値に応じて、私はプログレスバーが表示されます画像。あなたがコントロールのVisibilityプロパティを設定し、トリガーとControlTemplateを定義することができ

+0

、それだけでデータ型です。 – Maxim

+0

ビューモデルで列挙型を宣言します。 UserControl内のVMから列挙宣言を使用したくない場合は、UserControlライブラリに同じ型を宣言し、一方の列挙型から他方の列挙型に変換するバインディングコンバータを記述します。 – Clemens

+0

@Clemens VMでenumを宣言すると、usercontrolでVMを参照する必要があります。 – JuP

答えて

0

:MVVMでの列挙型での犯罪者は何もありません

<UserControl x:Class="WpfApplication1.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:WpfApplication1" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <UserControl.Template> 
     <ControlTemplate TargetType="UserControl"> 
      <Grid x:Name="Layout"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <Label Grid.Column="0" Content="{Binding ProtocolType, TargetNullValue='https://'}" /> 
       <TextBox Grid.Column="1" 
      VerticalContentAlignment="Center" MinWidth="200" Text="{Binding Hostname, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" /> 
       <Label Grid.Column="2" Content="{Binding PathType}" /> 
       <ProgressBar x:Name="pb" Grid.Column="3" IsIndeterminate="True" Width="40" Height="10" 
       HorizontalContentAlignment="Center" /> 
       <Image x:Name="img" Grid.Column="3" Width="16" Height="16" /> 
      </Grid> 
      <ControlTemplate.Triggers> 
       <DataTrigger Binding="{Binding WebServiceProgress}" Value="{x:Static local.Progress.InProgress}"> 
        <Setter TargetName="img" Property="Visibility" Value="Hidden" /> 
        <Setter TargetName="pb" Property="Visibility" Value="Visible" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding WebServiceProgress}" Value="{x:Static local.Progress.Success}"> 
        <Setter TargetName="img" Property="Visibility" Value="Visible" /> 
        <Setter TargetName="pb" Property="Visibility" Value="Hidden" /> 
       </DataTrigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </UserControl.Template> 
</UserControl> 
関連する問題