我在我的xaml中使用了ComboBox,但我无法直观显示视图上的任何数据。它只显示空文本文件和空下拉列表。
我试图在these tips的帮助下调试问题。但是,我还没有能够解决这个问题。
这是 databindingDebugConverter :
public class DatabindingDebugConverter : IValueConverter
{
public object Convert(object value1, Type targetType, object parameter, CultureInfo culture)
{
Debugger.Break();
return value1;
}
public object ConvertBack(object value2, Type targetType, object parameter, CultureInfo culture)
{
Debugger.Break();
return value2;
}
}
Text=
案例"Field Device"
(object{string})
ItemsSource=
value1上返回object{Device}
字段Category
,并引用Category1
对象中包含CategoryId
。SelectedValue
,再次返回"Field Device"
(object{string})
。这是ComboBox xaml:
<ComboBox x:Name="ProductCategoryComboBox" HorizontalAlignment="Right" Height="21.96" Margin="0,20,10.5,0" VerticalAlignment="Top" Width="100"
Text="{Binding DeviceDatabaseViewModel.SelectedDevice.Category, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource debugConverter}}"
IsEditable="False"
ItemsSource="{Binding DeviceDatabaseViewModel.SelectedDevice, Converter={StaticResource debugConverter}}"
SelectedValue="{Binding DeviceDatabaseViewModel.SelectedDevice.Category, Mode=TwoWay, Converter={StaticResource debugConverter}}"
SelectedValuePath="CategoryId"
DisplayMemberPath="Category" />
xaml中包含TextBlock
字段的类似绑定工作正常,并显示SelectedDevice
中的字符串值。
修改
selectedDevice
来自dataGrid
:
private Device _selectedDevice;
public Device SelectedDevice
{
get
{
return _selectedDevice;
}
set
{
if (_selectedDevice == value)
{
return;
}
_selectedDevice = value;
RaisePropertyChanged("SelectedDevice");
}
}
答案 0 :(得分:1)
Combobox用于从集合中选择一个Item(例如,如果您希望UI识别集合中的更改,则为List或ObservableCollection)。 你没有绑定到这里的集合:
ItemsSource =“{Binding DeviceDatabaseViewModel.SelectedDevice,Converter = {StaticResource debugConverter}}”
您需要绑定到ObservableCollection AllDevices或类似的东西,然后绑定到ItemsSource,而不是绑定到SelectedDevice。
这里有一个你可以绑定的例子:
public class DeviceDatabaseViewModel
{
public ObservableCollection<Device> AllDevices
{
get; set;
}
public DeviceDatabaseViewModel()
{
AllDevices = new ObservableCollection<Device>();
AllDevices.Add(new Device { Category = 'Computer', CategoryId = 1 }, new Device { Category = 'Tablet', CategoryId = 2 });
}
}
然后使用以下绑定:
ItemsSource="{Binding DeviceDatabaseViewModel.AllDevices, Converter= {StaticResource debugConverter}}"