我目前正在使用TextBlock以下命令绑定名为的属性的值Name:
<TextBlock Text="{Binding Name}" />
Run Code Online (Sandbox Code Playgroud)
现在,我想绑定另一个名为ID相同的属性TextBlock.
是否可以将两个或多个值绑定到同一个值TextBlock?是否可以通过简单的连接来完成Name + ID,如果没有,可以如何处理它?
我有一个多重绑定之类的
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource myConverter}">
<Binding Path="myFirst.Value" />
<Binding Path="mySecond.Value" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
我想将一个固定值,例如"123"传递给上面的两个绑定之一.我怎么能用XAML做到这一点?
我想使用StringFormat做这样的事情:
<Label x:Name="myLabel">
<Label.Content>
<Multibinding StringFormat="{}{0} - {1}">
<Binding Path="Lib1" />
<Binding Path="Lib2" />
</MultiBinding>
</Label.Content>
</Label>
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用,我得到了这个错误:
MultiBinding失败,因为它没有有效的Converter.MultiBindingExpression:目标元素是'Label'(Name ='myLabel'); target属性是'Content'(类型'Object')
有没有办法使这个代码工作?
我遇到了一个情况,我可以用它来轻松实现相同的功能MultiDataTrigger,或者交替,使用DataTrigger了MultiBinding.是否有任何实质性理由偏好一种方法而不是另一种方法?
使用MultiDataTrigger:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=SomePath}" Value="SomeValue"/>
<Condition Binding="{Binding Path=SomeOtherPath, Converter={StaticResource SomeConverter}}" Value="SomeOtherValue"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
Run Code Online (Sandbox Code Playgroud)
使用MultiBinding:
<DataTrigger Value="foo">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource fooConv}"/>
<Binding Path=SomePath/>
<Binding Path=SomeOtherPath/>
</MultiBinding>
</DataTrigger.Binding>
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/>
</DataTrigger.EnterActions>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Label控件在XAML中显示一个字符串.以下是我的XAML代码:
<Label Height="28" HorizontalAlignment="Left" Margin="233,68,0,0" Name="label13" VerticalAlignment="Top">
<Label.Content>
<MultiBinding StringFormat="{}{0} x {1}">
<Binding Path="Width" />
<Binding Path="Height" />
</MultiBinding>
</Label.Content>
Run Code Online (Sandbox Code Playgroud)
宽度和高度是我的类Movie的两个属性.我希望标签显示:"宽度x高度"ex.800 x 640但标签控件仍为空.任何帮助表示赞赏.我想在不使用转换器的情况下做这件事.
我使用TextBlock而不是Label修改了我的xaml.但它仍然不会填充显示输出.
<TextBlock Height="28" HorizontalAlignment="Left" Margin="233,68,0,0" Name="label13" VerticalAlignment="Top">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} x {1}">
<Binding Path="Width" />
<Binding Path="Height" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud) 有没有办法采取这种多重绑定:
<TextBox.IsEnabled>
<MultiBinding Converter="{StaticResource LogicConverter}">
<Binding ElementName="prog0_used" Path="IsEnabled" />
<Binding ElementName="prog0_used" Path="IsChecked" />
</MultiBinding>
</TextBox.IsEnabled>
Run Code Online (Sandbox Code Playgroud)
并且放在一条线上,如同<TextBox IsEnabled="" />?
如果是这样,我在哪里可以学习这种格式的规则?
我已经玩了很长一段时间的WPF,但今天我第一次需要MultiBinding在另一个内部嵌套,类似于:
<MultiBinding>
<Binding />
<MultiBinding>
<Binding />
<Binding />
</MultiBinding>
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)
我得到一个异常,表明框架不允许它:
XamlParseException未处理:向类型'System.Collections.ObjectModel.Collection(System.Windows.Data.BindingBase)'的集合添加值引发异常.
InnerException更明确的是:
BindingCollection不支持MultiBinding类型的项.只允许绑定.
所以挖掘网络以获取更多信息,我偶然发现了这个Microsoft Connect问题,这正是我的问题所在.
感谢您的反馈.WPF今天不支持这一点.多年来一直要求使用此功能(最近一次是本月早些时候 - 请参阅https://connect.microsoft.com/WPF/feedback/details/650164/nested-multibinding).我们将继续考虑将来的版本.
现在我已经平静下来,我不会轻松.我仍然需要这个,我如何嵌套MultiBindings?
有没有办法让tabcontrol采取最大标签项的大小(实际上,tabitem的内容)?
由于tabcontrol没有指定特定的大小,因此它应该自动调整大小:它可以正确地执行此操作,但是当您切换选项卡时,它会自动将其自身调整为当前所选选项卡内容的高度(和宽度).
我不希望调整大小发生,让tabcontrol假设最大项目的高度,但仍然让它自动调整大小.
有线索吗?我尝试数据绑定到Height使用多绑定作为内容的每个元素ActualHeight的Items属性,并对Tabcontrol 的属性和属性进行绑定.但是,唉,ActualHeight内容元素总是0.
<TabItem Header="Core" >
<Grid Margin="5">
<Grid.Height>
<MultiBinding Converter="{Converters1:AllTabContentEqualHeightConverter}">
<Binding Path="ActualHeight" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type TabControl}}"/>
<Binding Path="Items" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type TabControl}}"/>
</MultiBinding>
</Grid.Height>
...
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?
我有一个文本框,其Text属性具有TwoWay MultiBinding,UpdateSourceTrigger设置为PropertyChanged.第一个Binding是一个依赖属性(Value),它有一个PropertyChangedCallBack函数,可以将值四舍五入到一个小数位.
文本框的目的是在用户键入时执行舍入,而不是在文本框失去焦点时执行舍入,因此将UpdateSourceTrigger设置为PropertyChanged.
我遇到的问题是,如果输入的文本不会导致值更改,则Text属性和Value将变得不同步.仅当舍入操作导致值更改时,文本才会动态更新.例如,如果Text和Value都是123.4并且用户在此之后键入1,则Value将四舍五入为相同的值(123.4),但Text显示为123.41.但是,如果在4之后键入9,则值向上舍入为123.5.由于这个实际的变化,文本然后更新为相同(123.5).
是否有任何方法强制文本框从其源更新,即使源自上次触发后没有更改?我尝试过使用BindingExpressionBase.UpdateTarget()但这仅在UpdateSourceTrigger设置为Explicit时有效,不能用作在可以调用UpdateTarget的合适时间之前不再更新的值(例如TextInput处理程序).我已经尝试过其他方法,例如从绑定值显式更新Text值,暂时强制实际更改为Value以调用更新,但这些"hacks"要么不起作用,要么导致其他问题.
任何帮助将不胜感激.
代码如下.
<TextBox>
<TextBox.Text>
<MultiBinding Converter="{local:NumberFormatConverter}"
UpdateSourceTrigger="Explicit"
Mode="TwoWay">
<Binding Path="Value"
RelativeSource="{RelativeSource AncestorType={x:Type Window}}"
Mode="TwoWay" />
</MultiBinding> …Run Code Online (Sandbox Code Playgroud) binding textbox updatesourcetrigger propertychanged multibinding
我遇到了问题Binding.在Rectangle.Fill依赖属性被绑定到ObservableCollection与转换器.虽然ObservableCollection工具INotifyCollectionChanged,绑定没有更新.但是,我设法通过将我的代表团附加到集合的更改通知事件并手动刷新绑定来解决此问题:
void ColorsCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
BindingExpression b = colorRectangle.GetBindingExpression(Rectangle.FillProperty);
if (b != null)
b.UpdateTarget();
}
Run Code Online (Sandbox Code Playgroud)
不过最近,我改变了Binding对MultiBinding,并将上述溶液停止工作(的bIS null).有没有办法强制Multibinding更新目标属性?
最好的问候 - 幽灵.
multibinding ×10
wpf ×8
binding ×4
c# ×3
xaml ×3
converter ×1
data-binding ×1
datatrigger ×1
height ×1
multitrigger ×1
tabcontrol ×1
textblock ×1
textbox ×1
xml ×1