1

我正在开发一个 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(布尔值)。

 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(我也在做同样的事情,但使用不同的控件,这就是我选择 MultiValueConverter 的原因),我想从 Collection 发送 IsVerfied 值并返回消息。我的问题是如何设置 MultiBinding 中的绑定以从 Observablecollection 中读取 IsVerfied 值。我认为这条特定的线是定位 Collection 值的问题

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

1 回答 1

1

在您的 Binding 中,您希望使用 RelativeSource 或 ElementName,但不能同时使用两者。 有关两者之间差异的详细说明,请参阅这篇文章。

于 2016-08-25T22:03:00.603 回答