【问题标题】:Set Multibing for text - get and set为文本设置 Multibing - 获取和设置
【发布时间】:2014-11-15 13:51:54
【问题描述】:

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

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

ViewModels 都有一个名为“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 中获取值,但它没有将其值设置为特定的值(从父级继承)

【问题讨论】:

    标签: wpf mvvm multibinding


    【解决方案1】:

    我认为问题可能出在您用于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 的 Text 不变(尽管您之前尝试过删除/修改它)。所以我们需要一些标志justConvertedBack来防止这种情况发生。

    当前从通用 ViewModel 更改源将更改 TextBox 的文本不会从特定 ViewModel 更新源。但是,如果为 TextBox 的 Text 设置/键入某些值会更新来自特定 ViewModel 的源,但不会将该值反映回来自通用 ViewModel 的源。我希望这种行为是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2015-03-04
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多