好的快速摘要是,我正在尝试进行onewaytosource绑定。
解释我对代码的理解。 OneWaytoSource与One Way绑定相反。目标更新源。所以这里我的目标是我创建绑定(所以我的文本框)我的目标属性是前景。我的源代码是我的menuItem,我的source属性是" IsEnabled"。
值转换器在ConvertBack中编程,因为这是用于Onewaytosource或双向绑定的部分。
其中一个文本框:(我计划在大约40个文本框上使用这个类似的代码,如果前景为红色,将禁用我的menuItem)
<TextBox x:Name="upperLimitMinimum" Foreground="{Binding ElementName=menuItem, Path=IsEnabled, Mode=OneWayToSource, Converter={StaticResource myColorErrorConverter}}"
这是我的转换器代码:
public class myColorErrorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (null != value)
{
string x = value.ToString();
if (x == "Red")
{ return true; }
}
return false;
}
}
我的menuItem,
<MenuItem x:Name="menuItem" Header="Menu Item( Ctrl + E )" Command="{Binding MenuItem}"
我期待发生什么?当文本框前景变为红色时(由验证检查控制,使用多值转换器 - 未显示)menuItem应该被禁用。我在转换器上设置了一个断点,代码甚至没有进入转换器,所以不确定发生了什么?有人可以对此有所了解吗?
克莱门斯回应后,新代码:
<Style>
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource MultiValueConverterColour}" >
<Binding ElementName="upperLimitDefault" Path="Text" />
<Binding ElementName="upperLimitMaximum" Path="Text" />
<Binding ElementName="upperLimitMinimum" Path="Text" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="TextBox.Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
<Setter Property="TextBox.Foreground" Value="{Binding ElementName=MenuItem, Path=IsEnabled, Mode=OneWayToSource, Converter={StaticResource myColorErrorConverter}}" />
</Style>
所以现在启动时会访问第二个转换器并相应地禁用/启用menuitem,但是在应用程序运行期间,当文本框前景发生变化时,只访问第一个转换器并且颜色会改变但是第二个转换器不被访问
答案 0 :(得分:2)
通过评论,您似乎在样式设置器中设置了Foreground
属性。此赋值的优先级低于&#34;本地值&#34;由前景绑定指定,因此无效。
您可以替换
<TextBox Foreground="{Binding ...}" ... />
通过这样的样式设置器(或将其添加到已定义的TextBox样式):
<TextBox ...>
<TextBox.Style>
<Style>
<Setter Property="Foreground" Value="{Binding ...}" />
</Style>
</TextBox.Style>
</TextBox>