同时访问数据上下文和代码中的属性



我正在使用MVVM/WPF,并试图做一些看似简单的事情,但无法找到一个干净的解决方案。

我想做以下事情:

当模型中的属性发生变化时(在这种情况下WPF文本框的文本将被改变),使用一个方法在UI上执行与属性绑定相关的其他操作。

目前我在工具提示上使用多绑定(以获取文本框数据上下文+绑定路径),但这有点hack。

<TextBox x:Name="textBox" Text="{Binding Model.MyProperty}">
 <TextBox.ToolTip>
        <MultiBinding Converter="{StaticResource brNewMultiConverter}">
                <!-- This to trigger the converter in all required cases. 
                     Without it, i cant get the event to fire when filling 
                     the model initially 
                 -->
                <Binding ElementName="textBox" Path="Text" />
                <!-- This has the properties i need, but wont fire without 
                     the binding above -->
                <Binding ElementName="textBox" />
        </MultiBinding>
 </TextBox.ToolTip>
</TextBox>

我想让一些可重用的,也许是不同的控件,因此我不只是使用textchanged事件。

如果有人能告诉我正确的方向,我将不胜感激。

就你的Multibinding而言,你想要完成什么?我不知道你的转换器应该做什么,但它不能与IValueConverter实现类?我假设不是,它看起来像你正在传递文本框到转换器。

当您的模型属性得到更新时,您可以让视图模型订阅模型类上的事件。只需声明对象WithEvents (VB.NET)和添加事件处理程序On[PropertyName]Changed。

在实现MVVM时,我倾向于将代码隐藏视为二等公民。如果可以的话,我尽我所能将所有逻辑推到ViewModel或View。我几乎完全停止使用转换器,因为许多逻辑可以在ViewModels中复制,如果它是我想要重用的东西,我通常只有一个小助手类,它获取传递给它的任何东西,做一些事情,并将其传递出去。我从来没有真正与IValueConverter有过那么好的关系…

除此之外,不清楚你到底想做什么。我们能得到更多的说明吗?

看起来你想让工具提示有文本框的内容,如果是这样,为什么不这样做呢?

<TextBox Text="{Binding Model.MyProperty}" ToolTip="{Binding Model.MyProperty}"/>

如果这不是你想要的,但希望工具提示根据文本框的值改变,那么在视图模型中这样做,例如

public class MyViewModel
{
  string _MyProperty;
  public string MyProperty
  {
    get { return _MyProperty;}
    set 
    { 
       _MyProperty = value; 
       OnPropertyChanged("MyProperty");
       OnPropertyChanged("MyToolTipProperty"); //force WPF to get the value of MyToolTipProperty
    }
  }
  public string MyToolTipProperty
  {
    get 
    { 
      //return what you want
    }
  }
}

然后在你的标记中:

<TextBox Text="{Binding Model.MyProperty}" ToolTip="{Binding Model.MyToolTipProperty}"/>

相关内容

  • 没有找到相关文章

最新更新