我想實現一個對話框來詢問用戶輸入。我創建了一個用戶控件並將數據上下文綁定到ViewModel。我要求用戶從列表中選擇一個項目。我想將選擇傳遞迴主程序。來自用戶控制對話框的返回值
try
{
var ins = from Instrument in InstrumentList where Instrument.Comport == result.Comport select Instrument;
result.OperatorName = ins.FirstOrDefault().OperatorName;
result.OperatorID = ins.FirstOrDefault().OperatorID;
}
catch (Exception)
{
//Open a control to prompt for instrument.
Window window = new Window
{
Title = "Associate Com Port",
Content = new MyDialogView(),
SizeToContent = SizeToContent.WidthAndHeight,
ResizeMode = ResizeMode.NoResize
};
window.ShowDialog();
//var inst= ValueFromDialogBox
//WriteInstrumentToConfigFile(inst);
//Set proper Instrument/Comport pair
GetAdditionalData(result);
}
所以我需要的是ValueFromDialogBox。我不介意能夠獲得多個價值。如果我可以傳回一個對象,那麼我可以做任何我想做的事情。
這裏是XAMLfor對話框(MyDialogView)
<UserControl.DataContext>
<vm:MyDialogViewModel/>
</UserControl.DataContext>
<UserControl.Resources>
<ResourceDictionary Source="./MainWindowResources.xaml" />
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0"
Grid.ColumnSpan="2"
Grid.Row="0"
Style="{StaticResource textStyle}" HorizontalAlignment="Center"
Background="AliceBlue">
<Run Text="What instrument are you using?" />
</TextBlock>
<TextBlock Grid.Column="0"
Grid.Row="1"
Style="{StaticResource textStyle}"
VerticalAlignment="Center"
Background="AliceBlue">
<Run Text="Select the Instrument number from the list."/>
</TextBlock>
<ListBox Grid.Column="1"
Grid.Row="1"
SelectedItem="{Binding InstrumentSelected}"
ItemsSource="{Binding ListOfInstruments}"/>
</Grid>
這裏是視圖模型(MyDialogViewModel)
public class MyDialogViewModel : ViewModelBase
{
#region Fields
string prompt;
string comResponse;
string comport;
private string selectedInstrument;
private ObservableCollection<string> listOfInstruments;
#endregion
#region Properties
public string Prompt
{
get { return prompt; }
set
{
prompt = value;
RaisePropertyChanged();
}
}
public string ComResponse
{
get { return comResponse; }
set
{
comResponse = value;
RaisePropertyChanged();
}
}
public string ComPort
{
get { return comport; }
set
{
comport = value;
RaisePropertyChanged();
}
}
public string InstrumentSelected
{
get { return selectedInstrument; }
set
{
if (value == selectedInstrument)
return;
selectedInstrument = value;
base.RaisePropertyChanged();
}
}
public ObservableCollection<string> ListOfInstruments
{
get { return listOfInstruments; }
set
{
listOfInstruments = value;
RaisePropertyChanged();
}
}
#endregion
#region Commands
#endregion
#region Methods
#endregion
#region Constructors
public MyDialogViewModel()
{
listOfInstruments = new ObservableCollection<string>{
"Instrument 1", "Instrument 2", "Instrument 3", "Instrument 4"
};
}
public MyDialogViewModel(ref MainWindowViewModel mwvm)
{
listOfInstruments = new ObservableCollection<string>{
"Instrument 1", "Instrument 2", "Instrument 3", "Instrument 4"
};
}
#endregion
}
如果您希望我們幫助您獲得「ValueFromDialogBox」,請盡力告訴我們「ValueFromDialogBox」是什麼。它是窗口內容的屬性嗎?如果您希望我們幫助您查找窗口內容的屬性,則必須告訴我們有關窗口內容及其屬性的信息。 –
這是一個屬性。它是一個列表框中的字符串。 ListBox SelectedItem綁定到ViewModel屬性SelectedInstrument。當ViewModel被實例化時,ListBox被填充。 – ScottinTexas