【发布时间】:2014-04-04 17:24:24
【问题描述】:
我有 DataGrid 和 DataGridComboBoxColumn 可以编辑的列。当我编辑它时抛出异常。调试后我发现Converter 收到DependencyProperty.UnsetValue,因此我必须通过返回"" 将其过滤掉,这导致显示空单元格。
我试图用谷歌搜索并理解为什么我得到DependencyProperty.UnsetValue 但没有运气。
有什么想法吗?
public UserControl()
{
InitializeComponent();
DataContext = new MyViewModel();
}
public class MyViewModel : ViewModelBase
{
public ObservableCollection<MyItem> MyItems { get; private set; }
public MyViewModel()
{
LoadStates();
}
public void LoadStates()
{
MyItems = new ObservableCollection<MyItem>(DataProvider.GetList());
//...
}
}
public class MyItem
{
public bool Start {get; set;}
}
public class BoolToStatusConverter : IMultiValueConverter
{
private MyViewModel _model;
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
_model = values[0] as MyViewModel ;
//TODO: Why I get UnsetValue??
if (values[1] == DependencyProperty.UnsetValue) return "";
//Using _model
//...
return (bool)values[1] ? Statuses.Start : Statuses.Stop;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return new object[] { _model, (Statuses)value == Statuses.Start };
}
}
<UserControl.Resources>
<local:BoolToStatusConverter x:Key="BoolToStatusConverter" />
<ObjectDataProvider x:Key="myEnum" MethodName="GetValues" ObjectType="{x:Type core:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type Type="local:Statuses"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</UserControl.Resources>
<Grid>
<DataGrid ItemsSource="{Binding MyItems}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Status" ItemsSource="{Binding Source={StaticResource myEnum}}">
<DataGridComboBoxColumn.SelectedItemBinding>
<MultiBinding Converter="{StaticResource BoolToStatusConverter}">
<Binding Path="DataContext"
RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}" />
<Binding Path="Start" />
</MultiBinding>
</DataGridComboBoxColumn.SelectedItemBinding>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
【问题讨论】:
-
@EricScherrer,我以前看过这篇文章,但我不明白我错在哪里。你能帮忙吗?
-
可能是填充数据的时间问题。 MyItems 何时创建?
-
在它被初始化之后,你会立即发送一个属性更改事件。
-
@EricScherrer,我更新了我的帖子。我添加了如何创建
MyViewModel并填充MyItems。如果您能看一下,我将不胜感激