组合框双向绑定重置属性

本文关键字:属性 绑定 组合 | 更新日期: 2023-09-27 18:29:45

我在活动中的数据网格中有一个组合框。根据组合框的选择,我用程序的方式用控件填充另一个网格。用户在这些控件中输入一些数据,然后保存。组合框绑定的对象有许多属性,其中两个属性用于所选值路径和显示成员路径。使用组合框的双向绑定来绑定数据。重新打开已放置在工作流中的已保存活动时,将正确地重新加载数据,并在组合框中设置正确的对象值。但在UI渲染中,只有与组合框一起附加的值保持不变(即选定值路径和显示成员路径中的值),其余值将重置。

知道为什么会发生这种事吗?

p.S:将绑定设置为OneTime解决了检索问题,但加载后在UI上所做的任何更改都不会反映回来。

代码隐藏:

public ObservableCollection<MyRule> AllRules {get;set;}
public MyRule myRule{get;set;}

在数据网格加载事件中,我将AllRules填充为:

AllBusinessRules.Add(new MyRule () { RuleId = item.Id, RuleName = item.Name});

其中CCD_ 2和CCD_。

在同一事件中,如果我也加载任何以前保存的规则为:

myRule=SelectedRule; 

其中CCD_ 4也具有CCD_。

代码:

     <ComboBox  
        ItemsSource="{Binding Path=AllRules}"
       SelectedItem="{Binding Path=myRule,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
        SelectedValuePath="RuleId" 
        DisplayMemberPath="RuleName">
        <DataTemplate>
            <TextBox Text="{Binding Path=myRule.RuleName}"/>
        </DataTemplate>
    </ComboBox>

类别:

  public class MyRule{
    public int RuleId{get;set;}
    public string RuleName{get;set;}
    public List<string> Inputs{get;set;}   //properties that are reset when the UI renders
    public List<string> Outputs{get;set;}  //properties that are reset when the UI renders
    
    }

输入和输出属性通过反射从程序生成的控件中获得,并添加到由组合框填充的对象中并保存。

我在这里研究过这个问题,但解决方案并不能解决我的问题。任何帮助都会很棒。

组合框双向绑定重置属性

SelectedValuePathDisplayMemberPath设置错误。DisplayMemberPath应为"RuleName"。不需要SelectedValueSelectedValuePath,因为您已经设置了SelectedItem。由于BindingSelectedItem将自动获得所选项目。从myRule对象,您可以访问其他属性。

花了很多时间来调查问题所在,但现在我知道这很简单。

如我所示,在数据网格的Loaded事件中,我曾设置组合框的ItemsSource,而在项目源中,我只设置了属性RuleIdRuleName

问题:因此,问题是,当我在重新加载组合框(例如myRule=SelectedRule)时分配值(即所选值)时,ItemsSource中不存在其他属性(即输入和输出)。这就是为什么所选对象虽然正确,但没有输入和输出,因为SelectedItem来自组合框的ItemsSource,这给我的印象是双向绑定以某种方式重置了未与组合框绑定的属性的值。

解决方案:最后,我将我的item.Id0对象包装在另一个类似RuleInformation的对象中,即

public class RuleInformation{
public List<string>  Inputs;
public List<string>  Outputs;
public MyRule myRule{get;set;} 
}

其中MyRule类似于:

public class MyRule{
public int RuleId{get;set;}
public string RuleName{get;set;}
}

因此,组合框绑定到MyRule对象,而输入和输出属性在上部对象中保持不变。