我想将TextBox.Text
绑定到两个不同的来源。
我有2 ViewModel
个,一个是通用的ViewModel
,另一个是更具体的(从父母那里继承)。
两个ViewModel
都有一个名为" Hotkey"。
我想绑定我的TextBox.Text
,以便从常规ViewModel
获取值并将其设置为特定的ViewModel
。
我尝试了以下内容:
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" Foreground="#000">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource test}">
<Binding Path="DataContext.Hotkey" RelativeSource="{RelativeSource AncestorType={x:Type MetroStyle:MetroWindow}}" Mode="OneWay" />
<Binding Path="Hotkey" Mode="OneWayToSource"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
它确实从常规ViewModel
获取值,但它没有将其值设置为特定的值(从父级继承)
答案 0 :(得分:0)
我相信问题可能出在您用于MultiBinding
的转换器中,我只是尝试了一个简单的演示,看起来应该像这样实现转换器:
public class TestConverter : IMultiValueConverter
{
private bool justConvertedBack;
object IMultiValueConverter.Convert(object[] values, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
if (justConvertedBack) {
justConvertedBack = false;
return Binding.DoNothing;
}
return values[0];
}
object[] IMultiValueConverter.ConvertBack(object value, Type[] targetTypes,
object parameter, System.Globalization.CultureInfo culture)
{
justConvertedBack = true;
return new object[] {null, value};
}
}
在ConvertBack
完成之后,Convert
将被触发并保持TextBox的文本不变(尽管您之前尝试删除/修改它)。所以我们在这里需要一些标记justConvertedBack
来防止这种情况发生。
目前,从一般ViewModel更改源将更改TextBox的文本 ,但 不会更新特定ViewModel的源。但是,如果为TextBox的Text设置/键入一些值,则会更新特定ViewModel的源,但不会将该值从一般ViewModel反映回源。我希望这种行为是你想要的。