代码之家  ›  专栏  ›  技术社区  ›  Vaccano

wpf-转换器隐藏对DependencyProperty的依赖关系

  •  0
  • Vaccano  · 技术社区  · 15 年前

    如果视图模型中的DependencyProperty设置为Visibility.Hidden,我将在其中设置文本为“”。我通过一个转换器进行如下操作:

    <TextBlock Margin="0,0,5,0">
      <TextBlock.Text>
        <Binding Converter="{StaticResource GetVisibilityOfColumnTitles}"
                 Path="Name" />
      </TextBlock.Text>
    </TextBlock>
    

    转换器如下所示:

    public object Convert(object value, Type targetType, 
                          object parameter,System.Globalization.CultureInfo culture)
    {
        if (MainMediator.Instance.VisibilityOfWorkItemColumnTitles 
            == Visibility.Visible)
            return value;
        else
            return "";     
    }
    

    我承认这样做有点费解,但我有自己的原因(DataContext的复杂性和文本块的间距)

    我遇到的问题是,当WorkItemColumnTitles的可见性发生更改时,即使它是一个依赖属性textBlock.text也没有意识到其中存在依赖项(因为它在转换器中使用)。

    代码隐藏(最好是在转换器中)中是否有一种方法可以说明,当WorkItemColumnTitles的可见性更改时,此TextBlock想要更新此绑定?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Matt Hamilton    15 年前

    由于转换器既依赖于来自文本框的文本属性,也依赖于MainMeditor类上WorkItemColumnTitles属性的可见性,因此可能需要使用多重绑定,并将这两个属性都包含回XAML中。

    <TextBlock Margin="0,0,5,0"> 
        <TextBlock.Text> 
            <MultiBinding Converter="{StaticResource GetVisibilityOfColumnTitles}">
                <Binding Path="Name" />
                <Binding Path="VisibilityOfWorkItemColumnTitles" Source="{x:Static my:MainMediator.Instance}" />
            </MultiBinding> 
        </TextBlock.Text> 
    </TextBlock> 
    

    (在该代码示例中,我将“my”用作MainMeditor类的XML命名空间。)

    然后把转换器换成 IMultiValueConverter 以及文本和值的引用值[0] 1 对于“可见性”属性。现在绑定将知道其中一个属性是否更改,并适当地调用转换器。