我有一个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想要更新此绑定?
答案 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]。现在,绑定将知道是否有任何属性更改,并适当地调用转换器。