首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定到SelectedItem

绑定到SelectedItem
EN

Stack Overflow用户
提问于 2012-08-31 10:28:20
回答 2查看 964关注 0票数 3

我在应用程序中使用WPF带状库,并定义了如下组合框:

代码语言:javascript
复制
<r:RibbonComboBox>
    <r:RibbonGallery SelectedItem="{Binding ActiveCamera}">
        <r:RibbonGalleryCategory ItemsSource="{Binding AvailableCameras}"/>
    </r:RibbonGallery>
</r:RibbonComboBox>

绑定源是在窗口的DataContext中定义的

代码语言:javascript
复制
public Camera[] AvailableCameras
{
    get ...
}

public Camera ActiveCamera
{
    get { return _activeCamera; }
    set
    {
        if (_activeCamera != value && value != null)
        {
            _activeCamera = value;
            Notify("ActiveCamera");
            'Some more logic that is not related to UI
        }
        Debug.WriteLine("Active camera set to " + value);
    }
}

相机只是一个简单的类,具有属性Nameid

ActiveCamera在ViewModel的构造函数中设置为AvailableCameras的第一项。我可以用密码来验证。

但是,如果启动应用程序,则组合框为空。调试输出在启动应用程序之后声明了这一点:

代码语言:javascript
复制
Active camera set to 713x BDA Analog Capture

如果我单击组合框,则摄像机似乎被选中:

此外,还添加了以下调试输出:

代码语言:javascript
复制
Active camera set to

如果然后单击窗口中的其他位置,则组合框将关闭并保持为空。添加了以下调试输出:

代码语言:javascript
复制
Active camera set to

但这种行为似乎并不一致。如果我单击组合框,然后再次单击窗口中的其他地方,则会选择第一个摄像机,并添加以下调试输出:

代码语言:javascript
复制
Active camera set to           (on click on the combobox)
Active camera set to 713x BDA Analog Capture

如果在应用程序启动时实际选择绑定SelectedItem,那么这一切都不是问题。有什么办法可以做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2012-08-31 17:00:23

不确定这是否是问题所在,但我不记得这里是否默认使用TwoWay绑定。

代码语言:javascript
复制
SelectedItem="{Binding Path=ActiveCamera, Mode=TwoWay}"

还要确保在设置初始摄像机时,它是通过属性ActiveCamera而不是字段_activeCamera来确保调用Notify的。

这将是尝试的第一个简单步骤,如果这没有帮助,请评论这个答案,我试着看看是否有什么我能做的。

又一次疯狂的猜测。我注意到您的集合是一个数组。这不会通知对集合的任何更改,因此如果稍后添加项,它将通知GUI。当项目出现在列表中时,我想这不是问题所在。您可以尝试将其更改为ObservableCollection<Camera>

我从阅读你的文章更好的猜测是,你并不是这里的初学者,并且很清楚WPF数据库的细微差别。对吗?

票数 0
EN

Stack Overflow用户

发布于 2013-07-22 14:28:33

我最近偶然发现了一个似乎没有这个问题的RibbonGallery实例 (也就是说,在启动时,所选的项目显示得很正确)。他们有一个有趣的解决方案来管理RibbonGallery数据。他们创建了一个类GalleryData<T>,它分别具有一个SelectedItem和一个CategoryDataCollection属性,分别用于SelectedItem和ItemsSource绑定。这些绑定由针对RibbonGallery类型的样式处理。当我从样式中删除SelectedItem绑定并将其移动到图片库控件本身时,启动时没有选择。用一种方式进行这些绑定似乎很奇怪,但是如果这就是它所需要的,那么我想它是可以的。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12213498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档