0

私はそのような単純な行動をしています

public class KeyBoardChangeBehavior : Behavior<UserControl>
{
    public Dictionary<string, int> DataToCheckAgainst; 


    protected override void OnAttached()
    {
        AssociatedObject.KeyDown += _KeyBoardBehaviorKeyDown;
    }

    protected override void OnDetaching()
    {
        AssociatedObject.KeyDown -= _KeyBoardBehaviorKeyDown;
    }


        void _KeyBoardBehaviorKeyDown(object sender, KeyEventArgs e)
    {
        // My business will go there 
    }

}

ビューからこの辞書に値を割り当てたいので、次のように呼びます

<UserControl x:Class="newhope2.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:Interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
             xmlns:Behaviors="clr-namespace:newhope2"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Interactivity:Interaction.Behaviors>
        <Behaviors:KeyBoardChangeBehavior  />
    </Interactivity:Interaction.Behaviors>

    <Grid x:Name="LayoutRoot" Background="White">

    </Grid>
</UserControl>

しかし、どうすればこの辞書をXAMLまたはそのコードビハインドからの動作に渡すことができますか

4

2 に答える 2

3

バインディングを取得するには、プロパティがである必要がありますDependencyProperty

次のように、ビヘイビアーでプロパティを定義する必要があります。

    public Dictionary<string, int> DataToCheckAgainst
    {
        get { return (Dictionary<string, int>)GetValue(DataToCheckAgainstProperty); }
        set { SetValue(DataToCheckAgainstProperty, value); }
    }

    public static readonly DependencyProperty DataToCheckAgainstProperty =
        DependencyProperty.Register(
            "DataToCheckAgainst",
            typeof(Dictionary<string, int>),
            typeof(KeyBoardChangeBehavior),
            new PropertyMetadata(null));

VisualStudioの「propdp」スニペットを使用します。

使用法は、次のように、Adiが言ったとおりです。

<Interactivity:Interaction.Behaviors>
    <Behaviors:KeyBoardChangeBehavior DataToCheckAgainst="{Binding MyDictionary}" />
</Interactivity:Interaction.Behaviors>
于 2012-11-01T01:04:15.080 に答える
1

ディクショナリをプロパティとして宣言し、バインディングを介して値を渡すだけです。

動作では:

public Dictionary<string, int> DataToCheckAgainst { get; set; }

XAMLの場合:

<Interactivity:Interaction.Behaviors>
    <Behaviors:KeyBoardChangeBehavior DataToCheckAgainst="{Binding MyDictionary}" />
</Interactivity:Interaction.Behaviors>
于 2012-10-31T21:31:07.750 に答える