小编Nat*_*han的帖子

WPF MVVM ComboBox SelectedItem或SelectedValue不起作用

更新

经过一番调查.似乎问题是SelectedValue/SelectedItem在Item源完成加载之前发生.如果我坐在断点并等待几秒钟,它会按预期工作.不知道我将如何解决这个问题.

结束更新

我有一个应用程序在WPF中使用MVVM和ComboBox.下面是ViewModel示例.我遇到的问题是当我们离开页面并迁移回ComboBox时没有选择当前选择的值.

查看模型

public class MyViewModel
{
     private MyObject _selectedObject;
     private Collection<Object2> _objects;
     private IModel _model;

     public MyViewModel(IModel model)
    {
         _model = model;
         _objects = _model.GetObjects();
    }

    public Collection<MyObject> Objects
    {
         get
         {
              return _objects;
         }
         private set
         {
              _objects = value;
         }
     }

     public MyObject SelectedObject
     {
          get
          {
              return _selectedObject;
          }
          set
          {
               _selectedObject = value;
          }
      }
 }
Run Code Online (Sandbox Code Playgroud)

为了这个例子,我们可以说MyObject有两个属性(Text和Id).我的ComboBox XAML看起来像这样.

XAML

<ComboBox Name="MyComboBox" Height="23"  Width="auto" 
    SelectedItem="{Binding Path=SelectedObject,Mode=TwoWay}" 
    ItemsSource="{Binding Objects}"
    DisplayMemberPath="Text"
    SelectedValuePath="Id">
Run Code Online (Sandbox Code Playgroud)

无论我在回到页面时如何配置此对象并重新组装对象,ComboBox都不会选择该值.该对象通过属性中的get返回正确的对象.

我不确定这是否只是ComboBox和MVVM模式工作方式的问题.我们正在进行的文本框绑定正常工作.

wpf combobox mvvm

40
推荐指数
5
解决办法
11万
查看次数

在chrome扩展中插入图像

我想知道如何在Chrome扩展程序中插入图片.

<img id="image" src="logo.png" />
Run Code Online (Sandbox Code Playgroud)

我正在将html标签正确插入网站,但自然无法加载logo.png图像.

关于如何修改manifest.json的任何想法?

google-chrome google-chrome-extension

31
推荐指数
1
解决办法
3万
查看次数

从配置部分'common/logging'获取Common.Logging的配置失败

我正在尝试使用以下日志记录程序集配置控制台应用程序:

  • Common.Logging.dll(2.1.0.0)
  • Common.Logging.Log4Net1211.dll(2.1.0.0)
  • log4net.dll(1.2.11.0)

如果以编程方式配置记录器,那么一切正常:

NameValueCollection properties = new NameValueCollection(); properties["showDateTime"] = "true";    
Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter(properties);
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用以下配置文件启动它,它会爆炸:

<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="common">
            <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
        </sectionGroup>
    </configSections>

    <common>
    <logging>
        <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
             <arg key="configType" value="FILE-WATCH"/>
            <arg key="configFile" value="~/Log4NET.xml"/>
        </factoryAdapter>
    </logging>
</common>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这些是相关的错误消息:

{"Unable to cast object of type 'System.Configuration.DefaultSection' to type 'System.Configuration.AppSettingsSection'."}

{"Failed obtaining configuration for Common.Logging from configuration section 'common/logging'."}
Run Code Online (Sandbox Code Playgroud)

它似乎无法解析我的配置文件,是否有人知道正确的格式应该是什么,或者是其他错误的东西?我使用官方文档创建了配置文件.

c# log4net common.logging

22
推荐指数
2
解决办法
4万
查看次数

WPF ComboBox SelectedItem

好的,我一直在与WPF合作,但我需要一些帮助.

我有一个ComboBox如下:

<TabControl>
    <TabItem Header="1">
        <ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyListSelection}"/>
    </TabItem>
    <TabItem Header="2"/>
</TabControl>
Run Code Online (Sandbox Code Playgroud)

每当我离开标签1然后回到它时,选择就会被移除.我认为这样做的原因是控件在超出范围然后重新进入时会被销毁.但是在过程中,SelectedItem变为null,这不是用户想要的,因为UI是一个事件生命周期.

所以我想知道最佳路线是什么?我正在使用MVVM构建这个应用程序,所以我可以忽略我的ViewModel中MyListSelection属性的set调用,但是我在整个地方都有ComboBox,并且不喜欢修改我的ViewModel,因为我认为它是WPF的一个bug.

我可以子类化WPF ComboBox,但是没有SelectedItemChanging事件我只能在SelectedItem更改时添加处理程序.

有任何想法吗?

更新:

好吧,在我的头撞墙后,我发现为什么我的问题无法复制.如果列表项类型由于某种原因是一个类,则由WPF将SelectedItem设置为null,但如果它是值类型则不会.

这是我的测试类(VMBase只是一个实现INotifyPropertyChanged的抽象类):

public class TestListViewModel : VMBase
{
    public TestListViewModel()
    {
        TestList = new List<TestViewModel>();
        for (int i = 0; i < 10; i++)
        {
            TestList.Add(new TestViewModel(i.ToString()));
        }
    }

    public List<TestViewModel> TestList { get; set; }

    TestViewModel _SelectedTest;
    public TestViewModel SelectedTest
    {
        get { return _SelectedTest; }
        set
        {
            _SelectedTest = value;
            OnPropertyChanged("SelectedTest");
        }
    }
}

public class …
Run Code Online (Sandbox Code Playgroud)

wpf combobox selecteditem mvvm

7
推荐指数
1
解决办法
1万
查看次数