小编Guf*_*no2的帖子

具有OneWayToSource绑定的SelectedIndex不会触发

我有一个特定的xaml数据绑定问题.我有两个列表框(主 - 详细信息,因此列表框将IsSynchronizedWithCurrentItem设置为true).我希望我的viewmodel知道详细信息列表框中的所选项何时更改:我在viewmodel类上创建了一个int属性(即我们可以调用此属性SelInd)并在详细信息viewmodel上以这种方式绑定:

    SelectedIndex="{Binding Mode=OneWayToSource, Path=SelInd}"
Run Code Online (Sandbox Code Playgroud)

我在运行时没有得到任何错误/异常,但绑定不会触发:当所选项目发生更改时,我的viewmodel属性不会更新.如果我将绑定模式更改为TwoWay,一切正常,但这不是我需要的.我需要它与OneWayToSource一起使用(顺便说一句,如果我将SelectedItem绑定到SelectedValue属性,则适用相同的非工作行为).

为什么这些绑定不会触发OneWayToSource?

这是一个更完整的代码示例,只是为了让事情更清楚:编辑:我无法显示真实代码(NDA)但我会在这里展示更简单和类似的东西(Page的DataContext是一个PageViewModel类的实例解释我只需要我的viewmodel类的SelInd属性应该始终在第二个ListBox中反映SelectedIndex的值.我已经找到了这样做的替代方法(代码隐藏中的事件处理程序或附加行为)但是现在我只是好奇它为什么它不适用于OneWayToSource绑定.

<Page>
    <ContentControl x:Name="MainDataContext">
        <Grid DataContext={Binding Path=Masters}>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />

            </Grid.ColumnDefinitions>

            <ListBox Grid.Column="0"
                SelectionMode="Single"                           
             IsSynchronizedWithCurrentItem="True"
             ItemsSource="{Binding }">
                <ListBox.ItemContainerStyle>
            ...
            </ListBox.ItemContainerStyle>
            <ListBox.ItemTemplate>
                <DataTemplate>
                ....
                    </DataTemplate>
            </ListBox.ItemTemplate>
            </ListBox>

            <ListBox Grid.Column="1"
                SelectionMode="Single"                           
              SelectedIndex="{Binding Mode=OneWayToSource,  ElementName=MainDataContext,Path=DataContext.SelInd}"
             IsSynchronizedWithCurrentItem="True"
             ItemsSource="{Binding Path=Details}">
                <ListBox.ItemContainerStyle>
            ...
            </ListBox.ItemContainerStyle>
            <ListBox.ItemTemplate>
                <DataTemplate>
                ....
                    </DataTemplate>
            </ListBox.ItemTemplate>
            </ListBox>
        </Grid>
    </ContentControl>
</Page>
Run Code Online (Sandbox Code Playgroud)

这是视图模型类的草图

public class PageViewModel{
    public ObservableCollection<MasterClass> Masters {get;set;}

    public int SelInd {get;set;}

    ....
}
Run Code Online (Sandbox Code Playgroud)

这里是MasterClass,它只是一个名字和一个细节列表

public class MasterClass{
    public ObservableCollection<DetailsClass> Details …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf xaml selecteditem

9
推荐指数
1
解决办法
3215
查看次数

标签 统计

c# ×1

data-binding ×1

selecteditem ×1

wpf ×1

xaml ×1