【问题标题】:WPF datagrid template column combobox binding expression errorWPF数据网格模板列组合框绑定表达式错误
【发布时间】:2017-09-15 14:54:11
【问题描述】:

我在数据网格模板中有一个组合框。 我有一个调用命令的事件触发器。我已经确认该命令正在调用我的函数。 当我的函数返回 false 时,我想将组合框的背景颜色设置为黄色。如果返回 true,我希望它保持白色。

问题似乎在以下部分:

“Path=DataContext.ApplicationProfilesCollection[].ValidEnvironment”

在输出窗口中我得到:

“System.Windows.Data 错误:40:BindingExpression 路径错误:'[]' 在“对象”“ObservableCollection`1”上找不到属性 (哈希码=44314665)'。 BindingExpression:Path=DataContext.ApplicationProfilesCollection[].ValidEnvironment; DataItem='ProfilesUserControl' (Name='');目标元素是“组合框” (名称='');目标属性是“NoTarget”(类型“对象”)”

目前收藏中有 3 件商品。你知道我如何让 WFP 识别每一个吗? XAML 中的“[]”中有什么内容吗? 另外 - 我必须遵守 MVVM 模式。

请参阅下面的 XAML。 感谢您的宝贵时间,

<DataTemplate DataType="models:ApplicationProfile">
<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource 
                        Mode=FindAncestor,
                        AncestorType={x:Type UserControl}},
                        Path=DataContext.DsnCollection}"
          Validation.ErrorTemplate="{StaticResource ValidationTemplate}"
          SelectedItem="{Binding DataSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,  ValidatesOnDataErrors=True}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ValidateDataSourceCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ApplicationProfilesCollection[].ValidEnvironment}" Value="false">
                    <Setter Property="ComboBox.Background" Value="Yellow"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>

【问题讨论】:

  • ComboBox 中的项目,即 DsnCollection 中的项目,是否具有 ValidEnvironment 属性?或者这个属性是在哪里定义的?
  • 你需要展示你的数据模型,因为异常信息显示你的数据绑定错误
  • 显然[] 不是用 XAML 编写的有效内容。你能澄清一下你到底想做什么吗?我相信你需要使用转换器,但我不确定你想做什么。
  • 感谢您的回复。不,DsnCollection 没有 ValidEnvironment 属性。只有 ApplicationProfilesCollection 中的每个配置文件都会这样做。整个网格绑定到 ApplicationProfiles 集合。其中一个字段是从字符串列表 DsnCollection 中选择的 Dsn 名称。希望这会有所帮助。

标签: c# wpf mvvm combobox datagridtemplatecolumn


【解决方案1】:

ValidEnvironment 应该是您设置为 trueItemsSource 集合 (DsnCollection) 中项目的 public bool property /false 用于集合中的每个项目(Dsn 或任何您称呼的名称)。

然后你可以像这样绑定到它:

<Style TargetType="ComboBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding ValidEnvironment}" Value="False">
            <Setter Property="ComboBox.Background" Value="Yellow"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

您不能将DataTrigger 绑定到命令,因为命令不会返回任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 2017-05-17
    • 2020-02-14
    • 2012-06-05
    • 2013-03-19
    • 1970-01-01
    • 2012-10-01
    • 2011-04-24
    相关资源
    最近更新 更多