1

私が取り組んでいるプログラムの ViewModel を理解しようとしています。私は前にこれをやったことがありません。これは、私がこれまでに持っている と XAML をSwitch必要とするオブジェクトの部分クラス定義です。ViewModel私は XAML がもっと必要であることを知っています。

SwitchBrowser現在、ウィンドウを開く前にコードビハインドを実行して、ウィンドウにデータを入力しています。ObservableCollectionをXAML にバインドする方が簡単であることはわかっています。

オブジェクトを に格納し、CiscoSwitchオブジェクトObservableCollectionのプロパティに直接バインドできSwitchますか?

もしそうなら、XAML のonItemsSourceを on に設定するようなことはできますか? 現在、コード ビハインドで foreach を使用して. ModulesTreeviewModulesListCiscoSwitchModulesTreeView

または、 の を作成し、次に のObservableCollectionを作成するか、というようにしますか? SwitchModulesVSANs

 public partial class CiscoSwitch
{
    #region baseswitchclassproperties
    private string _SwitchName = String.Empty;
    public string switchName{ get{return _SwitchName;} set{_SwitchName=value;} }        private string _SWVersion = String.Empty;
    public  string swVersion{ get{return _SWVersion;} set{_SWVersion=value;} }
    private string _SwitchModel = String.Empty;
    public string switchModel { get{return _SwitchModel;} set{_SwitchModel=value;} }
    private string _SerialNumber = String.Empty;
    public string SerialNumber { get { return _SerialNumber; } set { _SerialNumber = value; } }
    private string _SwitchWWPN = string.Empty;
    public string SwitchWWPN { get { return _SwitchWWPN; } set { _SwitchWWPN = value; } }
    public Dictionary<int, SwitchModule> ModuleList = new Dictionary<int, SwitchModule>();
    public Dictionary <int, CiscoVSAN> VSANList = new Dictionary<int, CiscoVSAN>();
    protected EthernetPort _ManagementPort = new EthernetPort();
    public string IPAddress{ set{_ManagementPort.IPAddress=value;} get{return _ManagementPort.IPAddress;} }

    public string LastDataCaptureDate = null;
    public Dictionary<int, PortChannel> PortChanelList = new Dictionary<int, PortChannel>();
    public Dictionary<String, FCIPPort> FCIPPortList = new Dictionary<string, FCIPPort>();
    public InterVSANTopology IVRTopology =  null; //new InterVSANTopology();

    public Dictionary<int, List<CiscoSwitch>> NeighborsList = new Dictionary<int, List<CiscoSwitch>>();
    public Dictionary<string, string> DeviceAliases = new Dictionary<string, string>();
    public Dictionary<string, FCPort> FlogiDatabase = new Dictionary<string, FCPort>();
    #endregion
}

XAML:

<Window.Resources>
    <Style TargetType="{x:Type TreeViewItem}" x:Key="ModuleStyle">
        <Setter Property="Foreground" Value="Blue"/>
        <Setter Property="FontSize" Value="12"/>
    </Style>

    <Style TargetType="{x:Type TreeViewItem}" x:Key="RedModuleStyle" BasedOn="{StaticResource ModuleStyle}">
        <Setter Property="Foreground" Value="Red"/>
    </Style>



</Window.Resources>
<Grid Margin="0,0,-211.4,-168">
    <StackPanel HorizontalAlignment="Stretch" Name="StackPanel1" VerticalAlignment="Stretch" Width="Auto" Margin="0,0,188.6,114">
        <StackPanel.Resources> 
            <Style TargetType="{x:Type Label}" x:Key="LabelStyle">
                <Setter Property="Foreground" Value="Blue"/>
                <Setter Property="FontSize" Value="12"/>
                <Setter Property="FontWeight" Value="Bold"/>
            </Style>
        </StackPanel.Resources>
        <Label Content="Switch Name:" Name="Label1" Height="25" HorizontalAlignment="Left"/>
        <Label Content="Software Version:" Name="Label2" HorizontalAlignment="Left" />
        <Label Content="Model Number:" Name="Label3" HorizontalAlignment="left"/>
        <Label Content="IP Address:" Name="Label4" HorizontalAlignment="left"></Label>
        <Label Content="Serial Number:" Name="Label5" HorizontalAlignment="Left"></Label>
        <Label Content="Show Tech Taken:" Name="Label6" HorizontalAlignment="left"/>
    </StackPanel>
    <StackPanel Margin="105,0,15.6,114">
        <StackPanel.Resources>
            <Style TargetType="{x:Type Label}" x:Key="LabelStyle">
                <Setter Property="FontSize" Value="12"/>
                <Setter Property="FontWeight" Value="Bold"/>
            </Style>
        </StackPanel.Resources>
        <Label Content="Name" Name="SwitchNameLabel" HorizontalAlignment="left"/>
        <Label Content="Version" Name="VersionLabel" HorizontalAlignment="left"/>
        <Label Content="Model" Name="ModelNumberLabel" HorizontalAlignment="Left"/>
        <Label Content="IP" Name="IPAddressLabel" HorizontalAlignment="Left"/>
        <Label Content="Serial" Name="SerialLabel" HorizontalAlignment="Left"/>
            <Label Content="ST" Name="ShowTechLabel" HorizontalAlignment="Left"/>

    </StackPanel>
    <StackPanel HorizontalAlignment="Left" Height="Auto" Margin="0,156,0,0" VerticalAlignment="Top" Width="256" >
        <TreeView Name="ModulesTreeView" Height="auto" Background="GhostWhite" BorderThickness="0"/>


    </StackPanel>


</Grid>

4

1 に答える 1

2

シングルを作成する最初のアイデアObservableCollection<CiscoSwitch>は正しい方法です。これは、特定のニーズに合わせて拡張できる、より単純化された例です。

public class Person
{
    public string Name { get; set; }
    public string Address { get; set; }
}

ViewModel にObservableCollection<Person>呼び出されPeopleた .

<ListBox ItemsSource="{Binding Path=People}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name}" />
                <TextBlock Text="{Binding Path=Address}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

これは単純化しすぎた例ですが、必要に応じて拡張できるはずです。お役に立てれば!

于 2012-10-08T07:30:22.780 に答える