从ObservablleCollection读取的MultiValueConverter

时间:2016-08-24 19:11:30

标签: wpf datacontext imultivalueconverter

我正在开发一个wpf mvvm项目。在用户控件中,我有一个来自Devexpress的datagridControl,它绑定到Observable集合中的数据。

     <xcdg:DataGridControl x:Name="DataGridName"   HorizontalAlignment="left" VerticalAlignment="Stretch"
                                AutoCreateColumns="False"  
                                ItemsSource="{Binding ViewModel.Items}" 
                                ItemScrollingBehavior="Immediate"  SynchronizeCurrent="True" TabIndex="69" >

    <xcdg:DataGridControl.Columns >
        <xcdg:Column FieldName="Name" AllowSort="False"  Title="Name"   ShowInColumnChooser="False" />
    </xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>

Observable集合中的类包含Name(字符串)和IsVerified(Boolean)。

 private ObservableCollection<myData> _items = new ObservableCollection<myData>();

  public ObservableCollection<myData> Items
    {
        get { return _items; }
        set { _items = value; }
    }

     public class myData
     {
        public string Name { get; set; }

        public bool IsVerfied { get; set; }
     }

当IsVerfied的值为false时,我还有一个用于在dataGrid上方显示错误消息的文本块。

 <TextBlock Name="textBlockErrrMessage" Foreground="IndianRed">
                            <TextBlock.Text>
                                <MultiBinding Converter="{StaticResource MultiValueConverter}">
                                    <Binding Path="DataContext.IsVerified" RelativeSource="{RelativeSource AncestorType=xcdg:DataRow}" ElementName="DataGridName" />
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>

为了做到这一点,我计划有一个多值转换器(我也做同样的事情,但是为了一个不同的控件,这就是为什么我选择一个MultiValueConverter)我想从Collection发送IsVerfied值并返回消息。我的问题是如何在MultiBinding中设置Binding以从Observablecollection中读取IsVerfied值。这个特定的行是我认为定位Collection值

的问题
<Binding 
    Path="DataContext.IsVerified" 
    RelativeSource="{RelativeSource AncestorType=xcdg:DataRow}" 
    ElementName="DataGridName" />

1 个答案:

答案 0 :(得分:1)

在Binding中,您希望使用RelativeSource或ElementName,但不能同时使用两者。 See this post对两者之间的差异做了很好的澄清。