对于我的生活,我似乎无法使用multibindings绑定到我的viewmodel.net上的所有示例都直接绑定到gui元素,但每当我尝试使用viewmodel对象时,都会抛出异常.
我的问题是,如何在xaml中为多个viewmodel对象添加多绑定?
我需要将上下文菜单的IsEnabled属性绑定到我的viewmodel中的两个整数.以下绑定不起作用,因为它是为GUI组件设计的.如何使用我的整数?
<MenuItem ItemsSource="{Binding MyMenuItem}">
<MenuItem.IsEnabled>
<MultiBinding>
<Binding ElementName="FirstInt" Path="Value" />
<Binding ElementName="SecondInt" Path="Value" />
</MultiBinding>
</MenuItem.IsEnabled>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)
MyMenuItem是CLR对象,带有两个整数FirstInt和SecondInt.
Metro UI中不支持多绑定吗?或者它还没有被添加?
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0},{1}">
<Binding Path="FirstName" />
<Binding Path="LastName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud) 有一个非常奇怪的问题令我感到困惑.就像下面的代码一样,我创建了一个[Button]并将其[Canvas.LeftProperty]多重绑定到[Entity.X]和[Entity.Z].[实体] ]类已实现[INotifyPropertyChaned].
它在Convert()方法中运行良好,[Entity.X]和[Entity.Z]正确传递给[Canvas.LeftProperty].
但问题是:当我用Canvas.SetLeft()方法更改[Button]的位置时,转换了ConvertBack()方法,但是没有将正确的值传递给[Entity],[in]中的[value] Entity.X]的设置部分似乎始终是旧部分.
PS:我发现了一个类似的问题,但它也没有解决.. :(
类似的问题:http://social.msdn.microsoft.com/Forums/zh-CN/wpf/thread/88B1134B-1DAA-4A54-94ED-BD724724D1EF
<Canvas>
<Button x:Name="btnTest">
<Canvas>
Run Code Online (Sandbox Code Playgroud)
private void Binding()
{
var enity=DataContext as Entity;
var multiBinding=new MutiBinding();
multiBinding.Mode=BindingMode.TwoWay;
multiBinding.Converter=new LocationConverter();
multiBinding.Bindings.Add(new Binding("X"));
multiBinding.Bindings.Add(new Binding("Z"));
btnTest.SetBinding(Canvas.LeftProperty,multiBinding);
}
Run Code Online (Sandbox Code Playgroud)
public class LocationConverter: IMultiValueConverter
{
public object Convert(object[] values, TypetargetType,object parameter, CultureInfo culture)
{
return (double)values[0]*(double)values[1];
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return new object[]{ (double)value,Binding.DoNoting};//!!value here is correct
}
}
Run Code Online (Sandbox Code Playgroud)
public class Entity:INotifyPropertyChanged
{ …Run Code Online (Sandbox Code Playgroud) 基本上我需要知道的是如何将一个源发送HierarchicalDataTemplate到一个绑定,这就是我所拥有的:
<HierarchicalDataTemplate DataType="{x:Type myModel:Person}">
<StackPanel Orientation="Horizontal">
<Image Source="Images\User.gif" />
<TextBlock Margin="5,0,0,0" Text="{Binding Name}" />
</StackPanel>
<HierarchicalDataTemplate.ItemsSource>
<MultiBinding Converter="{StaticResource PersonConverter}">
<Binding Path="Name" />
<!-- Here I need something like Binding Path="Self" so I can send the source of the binding (the "Person" object) -->
</MultiBinding>
</HierarchicalDataTemplate.ItemsSource>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
所以我的源代码是一个类型的对象myModel:Person,我希望能够发送对象本身,MultiBinding以便PersonConverter可以使用它.
谢谢你的帮助.
我不能只使用一个绑定转换器,并作为参数传递到DataContext,并从那里选择我想要使用的属性?
我想做的很简单.我有一个窗口,我希望标题绑定到两个不同的属性.每当其中一个属性更改时,都应更新标题.
我先尝试过但没有工作
<Window x:Class="MyNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="{Binding Path=Clientname} {Binding Path=LoadedConfiguration}"
Run Code Online (Sandbox Code Playgroud)
那么我在这里和这里阅读有关Multibindings的内容.并尝试了它的使用,这实际上也不起作用
<Window x:Class="MyNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Title>
<Multibinding StringFormat="{}{0} + {1}">
<Binding Path="Clientname" />
<Binding Path="LoadedConfiguration" />
</Multibinding>
</Window.Title>
Run Code Online (Sandbox Code Playgroud)
错误是在WPF项目中不支持Multibinding,我认为没有任何意义.
所以,我猜测的是缺少xmlns或缺少.dll.我发现Multibindings在"PresentationFramework.dll"里面,我已经引用了它.根据msdn,你需要http://schemas.microsoft.com/winfx/2006/xaml/presentation或http://schemas.microsoft.com/netfx/2007/xaml/presentation来包含,我做了.
在这里,我可能实际上没有得到任何进一步,我希望你得到.
假设我有这个多重绑定:
<MultiBinding Converter="{StaticResource FooBarConverter}>
<Binding Path="Foo" Converter="{StaticResource FooConverter}" />
<Binding Path="Bar" Converter="{StaticResource BarConverter}" />
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用:传递给FooBarConverter 的值数组包含DependencyProperty.UnsetValue每个值(在本例中为两个)。删除子绑定上的转换器(FooConverter和BarConverter)给我实际值。顺便说一句:这些转换器被正确调用,只是看起来它们的结果被丢弃了。
这是有意的行为吗?我想绑定 2 个属性,因为我需要在将它们放入MultiValueConverter...之前至少转换其中之一。
我试图通过IMultiValueConverter将几个值传递给命令(作为命令参数).这些值在通过转换器时是正确的,但是一旦调用了Can_Execute()和Execute()命令,我就会获得一个空对象数组.有任何想法吗?
XAML:
<Button Content="+" HorizontalAlignment="Right" VerticalAlignment="Top" Width="23" Height="23" Margin="0,0,0,0">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource Converter_MultipleValues}">
<Binding/>
</MultiBinding>
</Button.CommandParameter>
<Button.Command>
<Binding Path="Command_Add_Files" Source="{StaticResource Vm_FileList}"/>
</Button.Command>
</Button>
Run Code Online (Sandbox Code Playgroud)
IMultiValueConverter类:
class cvt_multivalue : IMultiValueConverter {
public object Convert (object[] Values, Type Target_Type, object Parameter, CultureInfo culture) {
if (Target_Type != typeof (object)) throw new NotSupportedException ();
return Values;
}
public object [] ConvertBack (object Value, Type [] Target_Type, object Parameter, CultureInfo culture) {
throw new NotSupportedException ();
}
}
Run Code Online (Sandbox Code Playgroud)
当我没有使用MultiBinding和转换器时,代码工作得很好,但我需要MultiBinding,所以我可以将一些额外的信息传递给命令.
我在mvvm-wpf应用程序中有下面的组合框.我需要在此实现"文本搜索"..(以及多重绑定).请有人帮帮我.
<StackPanel Orientation="Horizontal">
<TextBlock Text="Bid Service Cat ID"
Margin="2"></TextBlock>
<ComboBox Width="200"
Height="20"
SelectedValuePath="BidServiceCategoryId"
SelectedValue="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
Path=DataContext.SelectedBidServiceCategoryId.Value}"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
Path=DataContext.BenefitCategoryList}"
Margin="12,0">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock DataContext="{Binding}">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}: {1}">
<Binding Path="BidServiceCategoryId" />
<Binding Path="BidServiceCategoryName" />
</MultiBinding>
</TextBlock.Text></TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
Run Code Online (Sandbox Code Playgroud) multibinding ×10
wpf ×8
data-binding ×3
c# ×2
mvvm ×2
.net ×1
binding ×1
silverlight ×1
text ×1
vb.net ×1
xaml ×1