У меня есть файл XAML, который имеет две вещи,Пользовательские привязки данных к более чем одна вещь WPF C#
в Combo Box
StackPanel
Как я сделайте так, чтобы смена в поле со списком автоматически заставила панель стека переключиться с одной панели стека на другую стекную панель.
Мой COMBOBOX что-то вроде
<ComboBox x:Name="MCbConnect" SelectedIndex="{Binding EnConnectionType}" Loaded="m_cbConnect_Loaded" SelectionChanged="m_cbConnect_SelectionChanged" Width="100"></ComboBox>
где EnConnectionType это свойство как этот
private ConnectionType _enConnectionType;
public ConnectionType EnConnectionType
{
get { return _enConnectionType; }
set { SetProperty(ref _enConnectionType, value, "EnConnectionType"); }
}
И ConnectionType является
public enum ConnectionType { Rs232 = 0, Can = 1, Ethernet = 2 };
Так я реализовали интерфейс INotifyChanged уже здесь. Но я не знаю, как связать эти данные с контейнером stackpanel, который позволит мне автоматически переключиться на другой вид панели стека в фоновом режиме.
Пример XAML, что я хотел бы, чтобы переключиться на это
<GroupBox x:Class="Gui.CtrlCommSocketSettings"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:src="clr-namespace:Akribis.Gui"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
Header="Comm Settings"
mc:Ignorable="d"
d:DesignHeight="80" d:DesignWidth="300">
<Grid Height="70" VerticalAlignment="Top">
<Grid.Resources>
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Right"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Margin" Value="0,0,3,0"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="Width" Value="120"/>
<Setter Property="Margin" Value="0,1"/>
</Style>
<Style TargetType="CheckBox">
<Setter Property="Margin" Value="0,4"/>
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Server:" Name="MTextBlockServer"/>
<TextBlock Grid.Row="1" Text="Port:"/>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Server}" Name="MTextBoxServer"/>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Port}"/>
</Grid>
с CS-файла с чем-то вроде
namespace Gui
{
public partial class CtrlCommSocketSettings
{
public CtrlCommSocketSettings()
{
InitializeComponent();
}
}
}
Я не хочу, чтобы это сделать программно, как я знаю, Я хочу избежать связи между моделью и представлением вместе.
пример того, что я не хочу делать, но есть на данный момент: в главном XAML, у меня есть пустой StackPanel
<StackPanel Orientation="Vertical" Name="MCtrlCommSettings"></StackPanel>
и я явно добавляя к этому StackPanel, делая что-то вроде
MCtrlCommSettings.Children.Clear();
MCtrlCommSettings.Children.Add(_serverCtrlCommSettings);
Как мне сделать это автоматически? Как то, как InotifyChanges будет автоматически обновляться между представлениями и моделью. Любое предложение будет с радостью встречено.
Чтения в Интернете, кажется, мне нужно реализовать какое-то наблюдаемый список
весе. большое спасибо, он отлично работает – CJC