5

私はここWPFとMVVMの初心者です。プロジェクトのウィンドウに特定のコントロールがあります。たとえば、ウィンドウにテキストボックスがあります。MVVMパターンを使用していますが、ここでは、ビューモデルからテキストボックスの表示プロパティを変更したいと思います。もう1つは、条件に基づいて、ビューモデルからテキストボックスの表示を変更したいということです。

まあ、私はそれをグーグルで検索しました、そしてグーグルは私にすべて異なる解決策であったいくつかの提案を投げます、そして私は完全に混乱しています。

誰かが私がこれを理解するのを手伝ってくれると思います。

これはWPFMVVMエキスパートにとっては簡単なことですが、私はこのことを学ぼうとしているので、例としていくつかのコードが必要です。

ありがとう

4

3 に答える 3

4

これはMVVMであるため、実際にいくつかのオプションを無効にしたいテキストボックスの可視性を変更したくありません..次に、そのオプションが有効か無効かは、テキストボックスの可視性に反映されます。

したがって、基本的にはProperty、次のような ViewModel が必要です。

public bool CanMyPropertyBeChanged {get; set;}

どちらを変更できますか (もちろん、まだ実装していない場合は、おそらくINotifyPropertyChanged を実装
する必要があります)... そして、コンバーターを介して、Textbox の可視性をこのプロパティにバインドします。

<TextBox Visibility="{Binding CanMyPropertyBeChanged, Converter={StaticResource boolToVis}}" />

これには、組み込みのBooleanToVisibilityConverterを使用できます。

<BooleanToVisibilityConverter x:Key="boolToVis" />
于 2013-03-21T11:17:21.133 に答える
2

XAML ファイルに以下を追加します。

<Window.Resources>
        <ResourceDictionary>
            <BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />
        </ResourceDictionary>
<Window.Resources>

テキストボックスに次を追加します。

<TextBox .... Visibility="{Binding IsVisibleBoolean, Converter={StaticResourcebooleanToVisibilityConverter}}" />

ビューモデルに IsVisibleBoolean プロパティを追加します。

public bool IsVisibleBoolean 
{
    get; set;
}
于 2013-03-21T11:20:54.967 に答える
1

複数の方法でそれを行うことができます

まず、直接バインドできます

XAML

<TextBox  Visibility="{Binding myVisibility}"/>

VM プロパティ

public Visibility myVisibility
    {
        get { return Visibility.Hidden; }
    }

ただし、コンバーターを使用することもできます (推奨される方法)

XAML

  xmlns:local="clr-namespace:yourNamespace">
<Window.Resources>
    <local:BooleanToVisibilityConverter x:Key="BooleanToVisibility" />
</Window.Resources>

<TextBox  Visibility="{Binding myVisibility,Converter={StaticResource BooleanToVisibility}}"/>

VM プロパティ

public bool myVisibility
    {
        get { return false; }
    }

BooleanToVisibilityConverter.cs

[ValueConversion(typeof(bool),typeof(Visibility))]
public sealed class BooleanToVisibilityConverter : IValueConverter
{
    public bool IsReversed { get; set; }
    public bool UseHidden { get; set; }
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var val = System.Convert.ToBoolean(value, CultureInfo.InvariantCulture);
        if (this.IsReversed)
        {
            val = !val;
        }
        if (val)
        {
            return Visibility.Visible;
        }
        return this.UseHidden ? Visibility.Hidden : Visibility.Collapsed;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2013-03-21T11:18:59.053 に答える