0

我是 WPF 的新手。我目前正在开发一个应用程序,我在 MSVC# 2010 中的解决方案有 2 个项目。一个项目(即MSPBoardControl)有一个mainwindow.xaml,我添加了另一个wpf 窗口ConnectView.xaml。通过使用 mainwindow.xaml 中的网格,我可以将 Connectview.xaml 视图添加到我在 mainwindow.xaml.cs 中的应用程序中。我的第二个项目是一个类库,它有一个用户控件(即电压)。

Mainwindow.xaml:此网格是我添加 Connectview.xaml UI 组件的网格

<Grid Grid.Row="0" Name="MainGrid" HorizontalAlignment="Stretch" Style="{DynamicResource styleBackground}" >                        
                </Grid>

我的 mainwindow.xaml 左侧有一个列表框,其中包含项目列表(即电压、时钟等)。.xaml 的右侧有我的网格,如上所示(包含启动时的连接视图)。我基本上需要的是当我从列表框中单击项目时,我想隐藏启动时显示的视图(连接视图)并使所选项目 UI 组件可见。

如开头所述,我想让我的类库(VoltageView)的用户控件在从列表框中单击“电压”项时可见。

我的 mainwindow.xaml 中的 ListBox:

 <ListBox Name="ButtonPanel" Style="{DynamicResource styleBanner}" ItemsSource="{Binding BoardOperations, Mode=TwoWay}" SelectedItem="{Binding SelectedList}" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Name="BoardTabChanger" Margin="53,27,0,0" Text="{Binding ListName}" />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

MSBoardControl 的 ViewModel 类在这里:

public class BoardControlViewModel : INotifyPropertyChanged
{        
    public ObservableCollection<BoardControlModel> m_BoardOperation;
    public List<ConnectModel> m_BoardNames; 

    public BoardControlViewModel()
    {
        //Adding items to ListBox
    }

    public List<ConnectModel> BoardNames
    {
        get; set;
    }

    private ConnectModel m_SelectedBoardItem;
    public ConnectModel SelectedBoard
    {
        get; set;
    }

    public ObservableCollection<BoardControlModel> BoardOperations
    {
        get; set;
    }

    //GIVES ME THE SELECTED ITEM FROM LISTBOX

    private BoardControlModel m_SelectedListItem;
    public BoardControlModel SelectedList
    {
        get
        {
            return m_SelectedListItem;
        }

        set
        {
            m_SelectedListItem = value;
            onListSelected(value);
            NotifyPropertyChanged("SelectedList");                
        }
    }

    private void onListSelected(BoardControlModel SelectedItem)
    {
        if (SelectedItem.ListName == "Voltage")
        {
            //HOW CAN I ADD THE VOLTAGEVIEW HERE???
        }
    }

上述方法 OnListSelected() 检索所选项目,当我检查条件 dat item = voltage 时,我想将电压视图组件添加到我的主网格并隐藏连接视图。

电压视图.xaml:

<Grid Name="VoltageControl" Style="{DynamicResource styleBackground}" DataContext="{StaticResource VoltageViewModel}" >
    <Label Content="Label" FontSize="15" Foreground="Black" Height="28" HorizontalAlignment="Left" Margin="10,31,0,0" Name="label9" VerticalAlignment="Top" Width="117" />
    <Label Content="Set Voltage" FontSize="15" Foreground="Black" Height="28" HorizontalAlignment="Left" Margin="150,31,0,0" Name="label10" VerticalAlignment="Top" Width="117" />
    <Label Content="Current Value" FontSize="16" Foreground="Black" Height="28" HorizontalAlignment="Left" Margin="300,31,0,0" Name="label11" VerticalAlignment="Top" Width="117" />
    <Label Content="Enable/Disable" FontSize="15" Foreground="Black" Height="28" HorizontalAlignment="Left" Margin="460,31,0,0" Name="label12" VerticalAlignment="Top" Width="127" />
    <Button Content="Refresh All" FontSize="13" Height="25" HorizontalAlignment="Left" Margin="230,520,0,0" Name="RefreshBtn" VerticalAlignment="Top" Width="105" />
</Grid>    

请帮忙!!!

4

1 回答 1

0

我会保留这个一般(ish)。您最好的选择可能是在 BoardControlViewModel 上添加一个 Grid 类型的属性(或任何电压和连接通用的 UIElement)。随着选择的更改,将 UI 属性更改为您想要的视图,然后为该属性点击 NotifyPropertyChanged。如果您愿意,可以直接从 onListSelected 调用 NotifyPropertyChanged。将您使用的任何网格的内容绑定到此属性,最好在 xaml.xml 中。当属性更改时,WPF 将通知网格其绑定内容已更改,并且它将查询您的新属性以查看它应该是什么。

于 2012-09-23T04:15:48.920 回答