【问题标题】:Update another UI element when propertychanged Xaml属性更改 Xaml 时更新另一个 UI 元素
【发布时间】:2015-04-06 21:55:03
【问题描述】:

我想知道在调用 propertychanged 时是否可以更新另一个 UI 元素。

这是一个例子:

public string TestString 
{
    get { return testString; }
    set
    {
        testString = value; 
        OnPropertyChanged("TestString");
    }
}

public TestClass TestClassInstance { get; set; }

假设我的测试类有一个名为 Update 的方法。如何设置它以便在 Xaml 中的 TestString 属性发生更改时调用 Update?我知道我总是可以将方法附加到事件处理程序,但我想知道我是否可以在 Xaml 中做到这一点。也许使用行为或类似的东西。 你能告诉我这是否可能吗?如果可以,你能帮助我朝着正确的方向前进吗?

【问题讨论】:

  • 您可以使用元素绑定。请参阅文本框的示例文本块。
  • @Ganesh 是的,我知道您可以将另一个 UI 元素的元素链接到另一个元素。我的意思是当 TextBox 已更改时,我想在 TestClassInstance 中调用更新方法。我该怎么做?
  • 只需在代码中更新即可。这不是魔术,xaml 中的任何内容都不应该“知道”您的 TestClassInstance 应该在 TestString 更改时调用其 Update 方法。
  • @Will 是的,我知道这不是魔法。我想知道是否可以通过附加行为来做类似的事情。我对 WPF 有点生疏,想知道是否必须在模型/视图模型中执行此操作,或者是否可以通过行为来执行此操作并通过 xaml 进行设置。
  • 可能。但是你必须写它。当属性 Z 更新时,在属性 Y 中运行方法 X 的框架中不存在任何内容:/

标签: wpf mvvm viewmodel attachedbehaviors


【解决方案1】:

听起来你在找Behaviours

<!-- This collection element might exist if you have already added other behaviors. -->
<i:Interaction.Triggers>
    <i:EventTrigger SourceName="textBox" EventName="TextChanged">
        <ic:CallMethodAction MethodName="Update" TargetObject="{Binding TestClassInstance}">
        </ic:CallMethodAction>
    </i:EventTrigger>
</i:Interaction.Triggers>

<Textbox x:Name="textBox" Content="{Binding TestString, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

但我不确定您是否可以通过此方法从代码中获取更改。如果您的更新方法是一个命令,您应该改用InvokeActionCommand

<cmd:InvokeCommandAction Command="{Binding TestClassInstance.Update}"/>

但是为什么要将它放入 XAML 中呢?它是特定于特定视图或应用程序类型的行为吗?

【讨论】:

  • 感谢您的回答! :)。它在大多数情况下都有效,但我如何使它适用于用户控件?假设我有一个包含列表框的用户控件,并且我想根据用户控件中更改的选择来调用命令?如何在主视图中获取该信息?例如: ...
  • Nvm。我刚刚向我的用户控件添加了一个 SelectionChanged EventHandler 并在我的列表框选择更改时调用它。
猜你喜欢
  • 1970-01-01
  • 2020-02-21
  • 2016-08-07
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2020-07-22
  • 2020-02-11
相关资源
最近更新 更多