如何调试和解决ComboBox的绑定问题?

时间:2016-03-06 13:44:36

标签: c# wpf xaml debugging combobox

我在我的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;
    }
}
  • Value1在ComboBox中返回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");
    }
}

1 个答案:

答案 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}}"