如何在XAML中将按钮单击连接到自定义控件?

时间:2015-03-10 04:13:18

标签: c# wpf xaml mvvm

简单的新手问题。

我有一个按钮,当前在viewmodel中执行“insert”代码:

 <Button Content="Insert" Grid.Column="3" Grid.Row="2" Height="75" 
               Command="{Binding Insert}" />

在同一个用户控件中,我有一个customcontrol,CustomInkCanvas,定义为:

<wc:CustomInkCanvas x:Name="myInkCanvas"
                    Vocabulary="{Binding Vocabulary, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
                    Text="{Binding Text, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
                    WordPad="{Binding WordPad, UpdateSourceTrigger=PropertyChanged, Mode=OneWayToSource}"
                    CloseCharacterPads ="{Binding CloseCharacterPads}"
                    EditWord ="{Binding EditWord}"                
                />

我想做的是添加以下内容:

       FormatText = {Binding ??? ElementName=Insert ???} 

到customcontrol xaml,这样点击Button就会向customcontrol发送一条消息,重新格式化自己。此重新格式化也需要在按钮所连接的视图模型的“插入”方法之前完成。为了清楚起见,我需要点击按钮,首先告诉custominkcanvas重新格式化,然后再在viewmodel中执行活动。

这可以通过XAML完成,如果是这样的话?

提前感谢您对此的任何帮助。 (如果我有一个强点,XAML不是它!)

1 个答案:

答案 0 :(得分:1)

您可以在视图模型上使用2个属性,在自定义控件上使用一个属性

CustomInkCanvas.cs

public string FormatText
    {
        get { return (string)GetValue(FormatTextProperty); }
        set { SetValue(FormatTextProperty, value); }
    }

    // Using a DependencyProperty as the backing store for FormatText.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty FormatTextProperty =
        DependencyProperty.Register("FormatText", typeof(string),
        typeof(CustomInkCanvas), new PropertyMetadata(string.Empty));

在您的ViewModel中(类需要实现 INotifyPropertyChanged

private string _updatedText = string.Empty;

    public string UpdatedText
    {
        get { return _updatedText ; }
        set
        {
            _updatedText = value;
            OnPropertyChnaged("UpdatedText");
        }
    }

然后在您的自定义控件上

<wc:CustomInkCanvas x:Name="myInkCanvas"
  FormatText={Binding Path="UpdatedText"} />

在您的命令中插入

this.UpdatedText = "your text";
//your insert code