c# - WPF MVVM ComboBox具有默认选定值

标签 c# wpf xaml mvvm combobox

我有一个琐碎的问题,但对我没有任何帮助:/
我正在尝试从viewmodel设置默认的选定组合框值。这是代码:

public class ItemFilter
{
    public int Id { get; set; }
    public string Name { get; set; }
}

在ViewModel中:
public MainViewModel()
{
    SelectedItemFilter = ItemFilters[0];
}

public IList<ItemFilter> ItemFilters
{
    get
    {
        IList<ItemFilter> itemFilter = new List<ItemFilter>();
        itemFilter.Add(new ItemFilter() { Id = 0, Name = "All" });
        itemFilter.Add(new ItemFilter() { Id = 1, Name = "One" });
        itemFilter.Add(new ItemFilter() { Id = 2, Name = "Two" });
        return itemFilter;
    }
}

public ItemFilter SelectedItemFilter
{
    get { return _selectedItemFilter; }
    set { SetProperty(ref _selectedItemFilter, value); }
}

在 View 中:
<DataGrid x:Name="DataGridItems"
              EnableRowVirtualization="True"
              ItemsSource="{Binding ItemCollection}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Foo" Binding="{Binding Path=SizeComment}" IsReadOnly="True" Width="120">
            <DataGridTextColumn.HeaderTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding DataContext.ItemFilters, RelativeSource={RelativeSource AncestorType=Window}}"
                                  SelectedItem="{Binding DataContext.SelectedItemFilter, RelativeSource={RelativeSource AncestorType=Window}, Mode=TwoWay}"
                                  DisplayMemberPath="Name" />
                </DataTemplate>
            </DataGridTextColumn.HeaderTemplate>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

我想念什么?

最佳答案

第一个明显的原因是在每个请求上都创建了ItemFilters。因此,SelectedItemFilter = ItemFilters[0];创建一个过滤器列表,然后将第一个过滤器分配给SelectedItemFilter。当ComboBox请求过滤器列表时,它将获得一个不同的过滤器列表。因此,在SelectedItemFilter项目列表中找不到ComboBox。有两种解决方案:

  • 更好的一个->在构造函数中一次使ItemFilters无效。
  • 如果1.不适用,则覆盖Equals()
  • 中的GetHashCode()ItemFilter

    关于c# - WPF MVVM ComboBox具有默认选定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42937464/

    相关文章:

    c# - DataGridView - 如何让复选框充当单选按钮?

    c# - 如何使用 Revit API 获取 Revit 文件版本?

    wpf - WPF 中的环境遮挡着色器效果?

    c# - 在 WPF 中使用矢量图形作为图标

    xaml - 将 IsVisible 绑定(bind)到由 Switch 切换的属性

    c# - 在 Linux 容器上导入 PowerShell 二进制模块时不导出命令

    c# - 用值替换 lambda 表达式中可为空的参数

    c# - 为什么选择 RelayCommand

    xaml - 键盘重叠在登录屏幕上 -Xamarin .forms

    c# - 我的 Windows 应用商店应用程序在关闭后仍在 Debug模式下运行