为文本设置乘法 - 获取和设置



我想将我的TextBox.Text绑定到两个不同的来源。

我有 2 个ViewModel,一个是一般ViewModel,一个更具体(继承自其父级)。

两个ViewModel都有一个名为"热键"的属性。

我想绑定我的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获取值,但它不会将其值设置为特定的值(继承自父级)

我相信

问题可能出在您用于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并保持文本框的文本不变(尽管您之前尝试过删除/修改它)。因此,我们需要一些标志justConvertedBack来防止这种情况发生。

当前从常规视图模型更改源将更改文本框的文本,但不会更新特定视图模型的源。但是,如果为文本框的文本设置/键入某些值,则会从特定视图模型更新源,但不会将该值从常规视图模型反射回源。我希望这种行为是你想要的。

相关内容

  • 没有找到相关文章

最新更新