/ / WPF zmena výberu používateľov ComboBoxu a programové zameranie s MVVM - c #, wpf, mvvm, combobox, textbox

WPF zmena výberu užívateľov ComboBoxu a programovateľné zaostrovanie pomocou MVVM - c #, wpf, mvvm, combobox, textbox

V mojej aplikácii MVVM mám textové pole a kombinovanú reklamu.

Užívateľ napíše do textového poľa číselnú hodnotu a rozbaľovaciu ponuku Combobox (po zadaní textového poľa) a užívateľ vyberie úroveň z kombinovaného výberu (nemôže kombinovaný príkaz otvoriť sám).

Chcem skontrolovať oba vstupy a podľa toho zmeniť kombinovaný režim.

Napríklad, ak by užívateľ nastavil textové pole na 1200,5 mV, zmenil by som textové pole na 1,0 a kombobox na V.

Otázka 1:

Ako môžem programovo zmeniť hodnotu Combobox SelectedValue, aby mohol užívateľ vidieť novú hodnotu?

Otázka 2:

Ako môžem rozbaľovať combobox, ale stále si ho nechaťzameranie na textové pole (aj keď je kurzor myši na rozbaľovacej ponuke combobox)? Zdá sa, že som sa po prvom výbere z komboboxu sústredil na textové pole.

Vďaka.

XAML:

<Grid >

<StackPanel Orientation="Horizontal">

<TextBox Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Height="25" Width="100"


/>


<ComboBox
IsDropDownOpen="{Binding IsDropDownOpen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding OffsetValues}"
SelectedValue="{Binding NodeCategory, Mode=TwoWay}"

Height="25" Width="100" IsHitTestVisible="False" Background="AliceBlue">
<ComboBox.Resources>
<sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">0</sys:Double>
</ComboBox.Resources>
</ComboBox>
</StackPanel>


</Grid>

ViewModel:

class ViewModel : ViewModelBase
{


private IList<string> offsetValues =  new List<string>() { "mV", "V" };
public IList<string> OffsetValues
{
get
{
return offsetValues;
}
set
{
offsetValues = value;
}
}




private bool isDropDownOpen;

public bool IsDropDownOpen
{
get { return isDropDownOpen; }
set
{
isDropDownOpen = value;
OnPropertyChanged();
}
}


private string _name;
public string Name
{
get { return _name; }
set
{

_name = value;
OnPropertyChanged( "Name" );

if( _name != "" )
{
isDropDownOpen = true;
OnPropertyChanged( "IsDropDownOpen" );
}

}
}




private string _NodeCategory;
public string NodeCategory
{
get
{
return _NodeCategory;
}
set
{
if( Convert.ToDouble( _name ) > 1000 )
{
_name = "1.0";
OnPropertyChanged( "Name" );




_NodeCategory = OffsetValues[1];



OnPropertyChanged( "NodeCategory" );


}
else
{


_NodeCategory = value;
OnPropertyChanged( "NodeCategory" );

}



}
}





}


public class ViewModelBase : INotifyPropertyChanged
{
protected virtual void OnPropertyChanged( [CallerMemberName]string propertyName = null )
{
PropertyChanged.Invoke( this, new PropertyChangedEventArgs( propertyName ) );
}

public event PropertyChangedEventHandler PropertyChanged;


}

odpovede:

0 pre odpoveď č. 1

V textovom poli pridajte obojsmernú väzbu na vlastnosť v zobrazenímodemu

V nastavovači vlastnosti (znamená aktualizovanú hodnotu textového poľa) zmeňte hodnotu uzlovej kategórie a hodnoty offsetu ... zvýšenie zmeny vlastnosti pre obe

To by malo fungovať

Píšem z mobilu, takže nemôžem pridať príklad.

Dúfam, že to pomôže