0

IsMultiSelect という名前の DependencyProperty を持つ WPF ユーザー コントロールがあります。UserControl xaml で非表示のボタンを表示したい。

<Button Visibility="{Binding IsMultiSelect, Converter=....}" />

このユーザー コントロールには、DataContext に割り当てられた ViewModel があります。上記の構文では、プロパティがビュー モデルに存在しないため、バインド エラーが発生します。

このエラーを修正するにはどうすればよいですか?

4

2 に答える 2

3

UserControlバインディングでは、さまざまな方法でをターゲットにすることができます。

RelativeSource1 つの解決策は、次のように設定して見つけることです。

<Button Visibility="{Binding IsMultiSelect, 
    RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
    Converter=....}" />
于 2013-05-02T18:42:39.410 に答える
-1

xaml からプロパティにバインドする代わりに、依存関係プロパティのプロパティ変更ハンドラーがボタンの可視性を変更する必要があります。

public static readonly DependencyProperty IsMultiSelectProperty = DependencyProperty.Register("IsMultiSelect", typeof(bool), typeof(MyUserControl), new PropertyMetadata(false, OnIsMultiSelectPropertyChanged));

private static void OnIsMultiSelectPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
    (sender as MyUserControl).OnIsMultiSelectPropertyChanged(e);
}

private void OnIsMultiSelectPropertyChanged(DependencyPropertyChangedEventArgs e)
{
    MyButton.Visibility = (bool)e.NewValue ? Visibility.Visible : Visibility.Collapsed;
}

public bool IsMultiSelect
{
    get { return (bool)GetValue(IsMultiSelectProperty); }
    set { SetValue(IsMultiSelectProperty, value); }
}

また、コンバーター ロジックを OnIsMultiSelectPropertyChanged 内に配置することもできます。

于 2013-05-02T18:25:18.047 に答える