【问题标题】:Setting BooleanToVisibilityConverter to true depending on selected combo box value根据选定的组合框值将 BooleanToVisibilityConverter 设置为 true
【发布时间】:2015-05-19 23:18:59
【问题描述】:

我需要在我的代码中添加一些逻辑,根据从我的 MVVM 模型中的 XAML 组合框中选择的值将 BooleanToVisibilityConverter 设置为 true 或 false。更复杂的是,我实际上有 2 个组合框。组合框 2 中显示的列表取决于组合框 1 中选择的值

组合框 1 XAML

<ComboBox Margin="103,6,0,24" 
     x:Name="FirstOne" 
     Grid.Column="1" 
     DisplayMemberPath="SetCriteria" 
     ItemsSource="{Binding CriteriaList}" 
     SelectedItem="{Binding SelectedCriteriaLists, Mode=TwoWay}"/>

组合框 1,后面的代码

public void SearchViewModel()
    {
        this.CriteriaList = new ObservableCollection<SearchCriteriaList> 
        {
            new SearchCriteriaList {SetCriteria = "Date Range"},
            new SearchCriteriaList {SetCriteria = "Gateway"},
            new SearchCriteriaList {SetCriteria = "Direction"}
        };

              this.OperatorList = new ObservableCollection<SearchOperatorLists>();        
        }

组合框 2 XAML

 <ComboBox Margin="103,41,1,40" 
                          x:Name="SecondOne" 
                          Grid.Column="1" 
                          Grid.RowSpan="2" 
                          DisplayMemberPath="OperatorName" 
                          ItemsSource="{Binding OperatorList}"/>

组合框 2,后面的代码

private readonly List<SearchOperatorLists> dateOperatorList = new List<SearchOperatorLists>
    {
        new SearchOperatorLists {OperatorName = "Today"},
        new SearchOperatorLists {OperatorName = "Between"},
        new SearchOperatorLists {OperatorName = "Last Month"}
    };

    private readonly List<SearchOperatorLists> gatewayOperatorList = new List<SearchOperatorLists>
    {
        new SearchOperatorLists {OperatorName = "CCSUK"},
        new SearchOperatorLists {OperatorName = "MCP"},
        new SearchOperatorLists {OperatorName = "CNS"},
        new SearchOperatorLists {OperatorName = "Email"}
    };

    private readonly List<SearchOperatorLists> directionOperatorList = new List<SearchOperatorLists>
    {
        new SearchOperatorLists {OperatorName = "In"},
        new SearchOperatorLists {OperatorName = "Out"}
    };

    private SearchCriteriaList selectedCriteriaList;

好的,所以只要在 FirstOne 组合框(日期范围、网关或方向)组合框 2 中选择了一个值,就使用 onPropertyChanged 事件显示相应的列表(dateOperatorList、gatewayOperatorList、directionOperatorList)

我的要求是在组合框 2 中捕获一个值,说“Between”,然后将我的 BooleanToVisibilityConverter 设置为 true。在这种情况下,它将显示 2 个日期选择器。

非常感谢任何指针。

【问题讨论】:

  • 这不是 BooleanToVisibilityConverter 的用途。创建您自己的转换器,或在视图模型中创建适当的状态属性。

标签: c# xaml mvvm


【解决方案1】:

而是使用对象模型,其中您的主要项目(第一个组合)具有 Children 属性,其中包含第二个 Combobox 的项目。

这将使您的第二个Combobox 的Binding 成为:

<ComboBox Margin="103,41,1,40" 
                      x:Name="SecondOne" 
                      Grid.Column="1" 
                      Grid.RowSpan="2" 
                      DisplayMemberPath="OperatorName" 
                      ItemsSource="{Binding SelectedCriteriaLists.Children}"/>

如果依赖对象列表发生变化,从长远来看,维护问题会简单得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    相关资源
    最近更新 更多