【发布时间】:2015-04-01 14:17:53
【问题描述】:
编辑:我绑定到与组合框绑定的相同属性(SearchType)-> 工作正常。我仍然想知道为什么我在这里描述的第一个解决方案不起作用。
我有
public enum SearchType
{
NetworkObjects,
Customers
}
在 ViewModel 构造函数中:
public SearchViewModel()
{
SearchType = Panels.SearchType.NetworkObjects;
在 xaml 中:
<UserControl.Resources>
<xpui:ConvertSearchTypeToVisibility x:Key="searchtypetovisibilityconverter" />
</UserControl.Resources>
<ComboBox
Name="SearchTypeComboBox"
ItemsSource="{Binding Path=SearchTypes}"
SelectedItem="{Binding Path=SearchType, Mode=TwoWay}">
...
<DataGrid.Visibility>
<MultiBinding Converter="{StaticResource searchtypetovisibilityconverter}">
<Binding RelativeSource="{RelativeSource Self}" Path="Name"/>
<Binding ElementName="SearchTypeComboBox" Path="SelectedItem" />
</MultiBinding>
</DataGrid.Visibility>
转换器:
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string gridName = (string)values[0];
SearchType searchType = (SearchType)values[1];
在转换方法中,值有 2 个项目和值[1]==null。此外,如果我取消绑定 SelectedItem 是 ViewModel 构造函数中设置的 SearchType.NetworkObjects 。我做错了什么?
【问题讨论】:
-
什么是SearchTypes,SearchType.NetworkObjects存在于其中吗?另外,您是否遇到异常?你能改用 MultiDataTrigger 吗?
-
我认为这是一种有效的方法。现在您的控件依赖于视图模型,如果您删除了 ComboBox 并且您的 DataGrid 依赖于它,它将无法编译。此外,它可能在控件初始化过程中显示为 null,然后在渲染后立即设置。
-
@matti 你能发布你的转换器的所有代码吗?我想我可能有答案,但不知道预期的行为是什么
-
它命中转换器的次数。什么时候应用数据上下文?
-
有时会发生在我身上。我不确定100%是这样,只是我的经验。但无论如何,很高兴能帮助你^^
标签: wpf xaml mvvm multibinding