0
でのviewmodelのDataContextのがない設定私は私がTabItem
でdatacontext
を設定していますtab control
は、コンストラクタ
<Controls:MetroAnimatedTabControl Grid.Column="3" Grid.Row="1" SelectedIndex="{Binding SelectedTabIndex,Mode=TwoWay}">
<TabItem Header="Manual Control">
<view:ManualControlView DataContext="{Binding ManualControlViewModel}"/>
</TabItem>
<TabItem Header="Set up">
<view:SetupView DataContext="{Binding SetupViewModel}"/>
</TabItem>
</Controls:MetroAnimatedTabControl>
を持ってmah metro
を使用してWPF
アプリケーションを持っています。私はTcpCllient
を作成し、その参照を各ViewModel
に渡しています。私がコンストラクタでこれをしているとき、すべてうまく動作します。
public MainViewModel()
{
_client = new TcpClient(IP_ADDRESS, PORT);
_client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
_master = ModbusIpMaster.CreateIp(_client);
ManualControlViewModel = new ManualControlViewModel(_master);
SetupViewModel = new SetupViewModel(_master);
}
ただし、TcpClient
はコンストラクタには作成しません。代わりに私は私のウィンドウの "接続"ボタンを押すと、それを作成したいと思います。しかし、私の "Connect"ボタンをクリックしてOnConnect
メソッドを実行すると、私のビューはdatacontext
に設定されていません。
private void OnConnect(object obj)
{
_client = new TcpClient(IP_ADDRESS, PORT);
_client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
_master = ModbusIpMaster.CreateIp(_client);
Connected = _client.Connected;
ManualControlViewModel = new ManualControlViewModel(_master);
SetupViewModel = new SetupViewModel(_master);
StartReadingInfo();
}
これは可能ですか?
方法を示しており、ここで私の答えhttp://stackoverflow.com/questions/5650812/how-do-i-bind-a-tabcontrol-to-a-collection-of-viewmodels/5651542#5651542を参照してください。 MVVMを使用してTabControlを操作します。あなたのボタンはあなたのビューモデル内のICommandにバインドされるべきであり、UIに既にバインドされている他のビューモデルを更新する必要があります。また、プロパティ値が変更されたことをUIに通知するために、プロパティにINotifyPropertyChangedも実装する必要があります。 – Will