我的MainWindow的数据上下文是一个ViewModel类:
视图模型:
我希望MainWindow的标题基于转换器。转换器应该接收ViewModel类,但只要Location或IsUnsavedChanges发生更改,就应该调用它。
当我希望将转换器绑定到某个对象时,我可以使用哪种技术,还能对该对象的字段中的更改做出反应?
目前我可以绑定到数据上下文中的Location字段,并且工作正常。请参阅下面的MainWindow.xaml:
<Window.Resources>
<my:MainWindowTitleConverter x:Key="titleConverter"/>
</Window.Resources>
<Window.Title>
<Binding Converter="{StaticResource titleConverter}" Path="Location"/>
</Window.Title>
但是,如果我只是绑定到数据上下文(不指定Path),则在数据上下文更改时调用它,但在Location或IsUnsavedChanges更改时不调用。
我可以通过在ViewModel中添加一个新的Title字段并在Location,IsUnsavedChanges等字段更改时通知它更改来解决这个问题,但我觉得它有点hacky。
答案 0 :(得分:1)
正如我在评论中提到的,使用MultiBinding,您可以绑定窗口Title
以对多个属性做出反应,例如:
<Window.Resources>
<my:MultiValueTitleConverter x:Key="titleConverter"/>
</Window.Resources>
<Window.Title>
<MultiBinding Converter="{StaticResource MultiValueConverter}">
<Binding Path="Location" />
<Binding Path="IsUnsavedChanges" />
</MultiBinding>
</Window.Title>
此外,您需要具有实现IMultiValueConverter
的转换器类以用于多绑定。例如:
public class MultiValueTitleConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values.Length > 1 && values[0] is string && values[1] is bool)
{
var location= values[0] as string;
var isUnsavedChanges= values[1] as bool;
return "some value based on two values above";
}
return "";
}
}