WPF - Converter隐藏了对DependencyProperty的依赖

时间:2009-12-29 22:22:58

标签: wpf data-binding binding

我有一个TextBlock(实际上是一大堆TextBlocks),如果我的ViewModel中的DependencyProperty设置为Visiblity.Hidden,我将Text设置为“”。我通过转换器执行以下操作:

<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并发症和TextBlock的间距)

我遇到的问题是,当VisibilityOfWorkItemColumnTitles发生更改时,即使它是依赖项属性,TextBlock.Text也没有意识到存在依赖关系(因为它在转换器中使用)。

在后面的代码(最好是在转换器中)中是否有一种方法可以说,当VisibilityOfWorkItemColumnTitles更改时,此TextBlock想要更新此绑定?

1 个答案:

答案 0 :(得分:2)

由于您的转换器依赖于TextBox的Text属性和MainMediator类上的VisibilityOfWorkItemColumnTitles属性,因此您可能需要使用MultiBinding并在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”作为MainMediator类的XML命名空间。)

然后将您的转换器更改为IMultiValueConverter,并为“visibility”属性的文本和值1引用值[0]。现在,绑定将知道是否有任何属性更改,并适当地调用转换器。