如果我们使用表达式交互ChangepropertyAction,则XAML中的双向绑定不会更新源

时间:2019-02-17 05:17:55

标签: c# wpf xaml

我遇到了这样一种情况:我必须在WPF项目中更新源数据对象,而没有任何后面的代码(仅严格地XAML更改)。描述如下:我有两个文本框,分别称为“雇员的姓名”和“职务”。

Employee.cs:

jmp    6 <label>

windows类如下:

public class Employee : INotifyPropertyChanged
{
    private string name;
    public string Name {
        get { return name; }
        set
        {
            name = value;
            if(PropertyChanged != null)
            {
                PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
            }
        }
    }

    private string title;
    public string Title {
        get { return title; }
        set
        {
            title = value;
            if (PropertyChanged != null)
            {
                PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Title"));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public static Employee GetEmployee()
    {
        var emp = new Employee()
        {
            Name = "Ali Ahmed",
            Title = "Developer"
        };
        return emp;
    }
}

请注意,public partial class MainWindow : Window { Employee employee = Employee.GetEmployee(); public MainWindow() { InitializeComponent(); DataContext = employee; } private void OnNameChanged(object sender, RoutedEventArgs e) { TextBox castedTextBox = sender as TextBox; employee.Title = castedTextBox.Text; } } 处理程序会将雇员的头衔设置为他的名字的字符串(模拟实际项目中不需要的错误)

XAML代码:

OnNameChanged

此XAML代码唯一重要的事情是在<Window x:Class="WpfApp1.MainWindow" 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:local="clr-namespace:WpfApp1" xmlns:i = "http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei = "http://schemas.microsoft.com/expression/2010/interactions" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <CheckBox x:Name="checkBox" Content="CheckBox" HorizontalAlignment="Left" Height="21" Margin="59,39,0,0" VerticalAlignment="Top" Width="89"/> <ComboBox HorizontalAlignment="Left" Height="25" Margin="59,72,0,0" VerticalAlignment="Top" Width="179" /> <TextBox HorizontalAlignment="Left" x:Name="TitleTextBox" Height="21" Margin="60,113,0,0" TextWrapping="Wrap" Text="{Binding Title, Mode=TwoWay}" VerticalAlignment="Top" Width="178"> <i:Interaction.Triggers> <i:EventTrigger EventName="TextChanged"> <ei:ChangePropertyAction TargetName="TitleTextBox" TargetObject="{Binding ElementName=TitleTextBox}" PropertyName="Text" Value=""/> </i:EventTrigger> </i:Interaction.Triggers> </TextBox> <TextBox HorizontalAlignment="Left" Height="24" Margin="60,146,0,0" TextWrapping="Wrap" Text="{Binding Name, Mode=TwoWay}" TextChanged="OnNameChanged" VerticalAlignment="Top" Width="178"/> <TextBlock HorizontalAlignment="Left" Height="27" Margin="59,180,0,0" TextWrapping="Wrap" Text="{Binding Name, Mode=OneWay}" VerticalAlignment="Top" Width="179"/> <TextBlock HorizontalAlignment="Left" Height="27" Margin="60,221,0,0" TextWrapping="Wrap" Text="{Binding Title, Mode=OneWay}" VerticalAlignment="Top" Width="179"/> </Grid> </Window> 上使用交互触发器。此XAML交互代码块的目的和目的是擦除标题文本框,希望TwoWay绑定也可以擦除错误地设置了以上TitleTextBox事件的员工标题的值。但是,它只擦除框内的内容,而没有实际更新下面的模型对象employee。

我的问题:对XAML 可以做些什么(因为这是我必须使用的特定约束),可能会迫使模型识别出更改标题框中的内容并更新Employee对象?

0 个答案:

没有答案